Non è possibile modificare una raccolta mentre si enumera su di essa.
Dal docs for LinkedList<T>.GetEnumerator
:
Un enumeratore rimane valido finché la collezione rimane invariato. Se le modifiche vengono apportate alla raccolta, come aggiungere, modificare o eliminare elementi , l'enumeratore è irrecuperabilmente invalidato e il suo comportamento non è definito.
In pratica credo che lancerà sempre un InvalidOperationException
, nonostante il comportamento ufficialmente non definito.
EDIT: ti ha chiesto in un commento se un ciclo while
aiuterebbe ... un ciclo durante l'utilizzo GetEnumerator
/MoveNext
/Current
no, ma questo:
LinkedListNode<MyNode> current = myList.First;
while (current != null)
{
if (condition) // use current.Value to get the value
{
myList.AddLast(new MyNode());
}
current = current.Next;
}
Per quanto mi consapevole, è del tutto sicuro e prevedibile. Puoi sempre chiedere a un nodo il suo prossimo nodo. Se ti capita di guardare il nodo di coda e aggiungerne un altro, otterrai il nuovo nodo di coda quando chiederai "next".
Se ciò non aiuta, forniscici maggiori dettagli su ciò che stai cercando di ottenere.
fonte
2010-08-08 19:26:37
Completamente sicuro è un tratto, un ciclo infinito e OOM se il nuovo nodo corrisponde alla condizione. –