Nie można zmodyfikować kolekcji podczas jej wyliczania.
Z docs for LinkedList<T>.GetEnumerator
:
Numerator zachowuje ważność tak długo, jak kolekcja pozostaje niezmieniona. Jeśli do kolekcji zostaną wprowadzone zmiany , takie jak dodawanie, modyfikowanie lub usuwanie elementów , moduł wyliczający zostanie nieodwracalnie unieważniony, a jego zachowanie zostanie niezdefiniowane.
W praktyce uważam, że zawsze będzie rzutować InvalidOperationException
, mimo że oficjalnie zachowanie jest niezdefiniowane.
EDIT: Pytałeś w komentarzu czy while
pętla pomogłoby ... pętlę podczas używania GetEnumerator
/MoveNext
/Current
nie, ale to będzie:
LinkedListNode<MyNode> current = myList.First;
while (current != null)
{
if (condition) // use current.Value to get the value
{
myList.AddLast(new MyNode());
}
current = current.Next;
}
O ile jestem świadomy, że jest całkowicie bezpieczny i przewidywalny. Zawsze możesz poprosić węzeł o kolejny węzeł. Jeśli zdarzy ci się patrzeć na węzeł końcowy i dodać kolejny, otrzymasz nowy węzeł końcowy, gdy poprosisz o "następny".
Jeśli to nie pomoże, proszę podać nam więcej informacji o tym, co próbujesz osiągnąć.
Całkowicie bezpieczne to rozciągnięta, nieskończona pętla i OOM, jeśli nowy węzeł dopasuje warunek. –