Вы не можете изменять коллекцию, пока перечисляете ее.
Из документов для LinkedList<T>.GetEnumerator
:
Перечислитель остается в силе до тех пор, пока
коллекция остается без изменений. Если
внесены изменения в коллекцию,
такие как добавление, изменение или удаление
элементы, перечислитель
безвозвратно признан недействительным и его
поведение не определено.
На практике я считаю, что он всегда выдаст InvalidOperationException
, несмотря на то, что поведение официально не определено.
EDIT: Вы спросили в комментарии, поможет ли цикл while
... цикл while с использованием GetEnumerator
/ MoveNext
/ Current
не поможет, но это будет:
LinkedListNode<MyNode> current = myList.First;
while (current != null)
{
if (condition) // use current.Value to get the value
{
myList.AddLast(new MyNode());
}
current = current.Next;
}
Насколько я знаю, это абсолютно безопасно и предсказуемо. Вы всегда можете запросить у узла следующий узел. Если вам случится посмотреть на хвостовой узел и добавить еще один, вы получите новый хвостовой узел, когда попросите «следующий».
Если это не поможет, пожалуйста, дайте нам более подробную информацию о том, чего вы пытаетесь достичь.