Re[16]: C# [Proposal] init block for safe initialization of
От: Sinclair Россия https://github.com/evilguest/
Дата: 27.12.25 06:24
Оценка:
Здравствуйте, Serginio1, Вы писали:

S>Здравствуйте, Sinclair, Вы писали:


S>>>>Попробуйте решить проблему при помощи EmptyNode.


S>>У нас проблема не в NullReferenceException, а в нарушении инварианта. В частности, node1.Next и node2.Previous так и остались непроинициализированными. Вы код-то попробуйте запустить


S> Я же уже писал


S>
S>private Node(bool blin)
S>{
S> this._next= this;
S> this._previous = this;
S>}
S>

Это никак не поможет. Вы не понимаете главного: проблема не в null. А в отсутствии инициализации. У нас по ТЗ в графе узлов не должно быть "пустых" ссылок. Неважно, как эти пустые ссылки описываются — как null или как ссылка на специальный синглтон.
И вот ваш код нарушает этот инвариант!
node1.Next == Node.EmptyNode
node1.Previous == node2
node2.Next == node1
node2.Previous == Node.EmptyNode

А должно быть (например)
node1.Next == node2
node1.Previous == node2
node2.Next == node1
node2.Previous == node1

Вот как раз это и надо прогарантировать. И если бы не цикличность топологии, то всё неплохо бы работало и в существующем языке: required как раз и означает, что нужно обязательно проинициализировать эти свойства.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.