Информация об изменениях

Сообщение Re[13]: C# [Proposal] init block for safe initialization of от 25.12.2025 15:27

Изменено 25.12.2025 19:53 Serginio1

Re[13]: C# [Proposal] init block for safe initialization of
Здравствуйте, Sinclair, Вы писали:

решить проблему при помощи EmptyNode.


S>>
S>>#продвинутый nullable enable
S>>        var obj1 = new SomeType1();
S>>       var obj2 = new SomeType2();
S>>obj1.Prop = obj2;
S>>obj2.Prop = obj1;
S>>// Local functions are allowed
S>>void Connect() => obj1.Child = obj2;
S>>Connect();
S>>#продвинутый nullable disable
S>>

S>Ничего не получится. Если Prop — non-nullable required, то этот код не скомпилируется. Если он объявлен как nullable — то любой случайный дятел сможет его занулить после строчки #продвинутй nullable disable.
S>Ещё идеи есть?

Еще раз #продвинутый nullable enable это анализатор проверки установки свойств
Он будет выдавать ошибку если не установлены все свойства obj1 и obj2
Написать свой анализатор кода не проблема.
Разумеется основная проверка non-nullable required будет отключена, так за проверку будет отвечать #продвинутый nullable enable
Re[13]: C# [Proposal] init block for safe initialization of
Здравствуйте, Sinclair, Вы писали:

решить проблему при помощи EmptyNode.


S>>
S>>#продвинутый nullable enable
S>>        var obj1 = new SomeType1();
S>>       var obj2 = new SomeType2();
S>>obj1.Prop = obj2;
S>>obj2.Prop = obj1;
S>>// Local functions are allowed
S>>void Connect() => obj1.Child = obj2;
S>>Connect();
S>>#продвинутый nullable disable
S>>

S>Ничего не получится. Если Prop — non-nullable required, то этот код не скомпилируется. Если он объявлен как nullable — то любой случайный дятел сможет его занулить после строчки #продвинутй nullable disable.
S>Ещё идеи есть?

Еще раз #продвинутый nullable enable это анализатор проверки установки свойств
Он будет выдавать ошибку если не установлены все свойства obj1 и obj2
Написать свой анализатор кода не проблема.
Разумеется основная проверка non-nullable required будет отключена, так за проверку будет отвечать #продвинутый nullable enable

Если нет отмены то можно и так

 #nullable disable
 #продвинутй nullable enable
 код c проверкой на присваивание всем полям не null значений
 #продвинутй nullable disable
 #nullable enable


Это намного лучше чем городить новый язык, так как может применяться ко всем версиям языка