Здравствуйте, 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 как раз и означает, что нужно обязательно проинициализировать эти свойства.