No puede modificar una colección mientras la enumera.
Desde el docs for LinkedList<T>.GetEnumerator
:
Un enumerador sigue siendo válida mientras la colección se mantiene sin cambios. Si se realizan cambios en en la colección, , como agregar, modificar o eliminar elementos , el enumerador es irrevocablemente invalidado y su comportamiento no está definido.
En la práctica, creo que siempre lanzará un InvalidOperationException
, a pesar del comportamiento oficialmente indefinido.
EDIT: Se le preguntó en un comentario si un bucle while
ayudaría ... usando un bucle while GetEnumerator
/MoveNext
/Current
no lo haría, pero esto:
LinkedListNode<MyNode> current = myList.First;
while (current != null)
{
if (condition) // use current.Value to get the value
{
myList.AddLast(new MyNode());
}
current = current.Next;
}
En lo que a mí consciente, eso es completamente seguro y predecible. Siempre puede pedirle a un nodo su próximo nodo. Si observa el nodo de cola y agrega otro, obtendrá el nuevo nodo de cola cuando solicite "siguiente".
Si eso no funciona, por favor denos más detalles sobre lo que está tratando de lograr.
Totalmente seguro es un bucle de estiramiento, sin fin y OOM si el nuevo nodo coincide con la condición. –