При перечислении коллекции .NET MSDN сообщает , что:
Перечислитель остается действительным, пока коллекция остается неизменной. Если в коллекцию вносятся изменения, такие как добавление, изменение или удаление элементов, перечислитель безвозвратно аннулируется и его поведение не определено.
Что именно означает «безвозвратно признанный недействительным»?
Возьмем, к примеру, двоичное дерево, со ссылками вниз и слева и справа от потомков, а также вплоть до родителя. В таком дереве достаточно одной ссылки на один узел в дереве, чтобы перемещаться по дереву, поскольку из него можно легко найти следующий узел в дереве.
Итак, предположим, что с этим деревом я удаляю какой-то другой узел (предположительно, я не удаляю узел, в котором я сейчас нахожусь), должен ли я по-прежнему лишать законной силы счетчик? Обратите внимание, что я не говорю о многопоточной операции здесь, просто об одном потоке, выполняющем цикл, и изменяющем коллекцию внутри тела цикла.
Является ли этот "закон" действительно этим законом, что даже если счетчик может продолжить, он не должен?