Здравствуйте, Serginio1, Вы писали:
S> Получаем. Ибо для всех нод кроме первой и последней у нас будет проверка, а с null у нас этой проверки не будет.
Нет. Ни для какой из нод никакой проверки нет.
То, что вы кому-то из них что-то установили, никак не контролируется компилятором.
Вот код — ошибка копипаста:
var node1 = new Node("Hello") { Next = Node.EmptyNode, Previous = Node.EmptyNode };
var node2 = new Node("World") { Next = node1, Previous = Node.EmptyNode) };
node1.Previous = node2;
foreach(var n in Iterate(node1)
Console.WriteLine(n);
Компилятор молчит. Дальше что? Где проверка-то?
S> Еще раз читай внимательно для всех узлов кроме первой и последней будет "правильная "проверка, чего лишен Node?
Сколько бы раз я не читал, неправда правдой быть не перестанет. Проверка либо есть, либо её нету. EmptyNode проверку затыкает — ничуть не лучше, чем
null!.
S>Меня беспокоило то, что в алгоритме Влада будет вызываться ошибка, так как первый и последний узел не будут инициализироваться!
Ну так и в вашем коде они не инициализируются.
S>Я предложил , что не нужно изменять язык, достаточно добавить свой анализатор типа
Ну так Влад примерно это и предлагает. Только встроить "анализатор" в компилятор, где уже процентов 70% этого анализа проведено. Плюс есть ещё несколько интересных вопросов про то, как должен этот анализатор выяснять, что именно ему нужно проверить. Влад пытался навелосипедить специальный стейтмент, который позволяет указать границы "опасной зоны" вместе с конкретными объектами, которые нужно доинициализировать в её пределах. А как прагма поможет понять, за кем следить? Что, если прагмы будут стоять не по границам C# scope?