You can't modify a collection while you're enumerating over it.
From the docs for LinkedList<T>.GetEnumerator
:
An enumerator remains valid as long as
the collection remains unchanged. If
changes are made to the collection,
such as adding, modifying, or deleting
elements, the enumerator is
irrecoverably invalidated and its
behavior is undefined.
In practice I believe it will always throw an InvalidOperationException
, despite the behaviour officially being undefined.
EDIT: You asked in a comment whether a while
loop would help... a while loop using GetEnumerator
/MoveNext
/Current
wouldn't, but this will:
LinkedListNode<MyNode> current = myList.First;
while (current != null)
{
if (condition) // use current.Value to get the value
{
myList.AddLast(new MyNode());
}
current = current.Next;
}
As far as I'm aware, that's entirely safe and predictable. You can always ask a node for its next node. If you happen to be looking at the tail node and add another one, you'll get the new tail node when you ask for "next".
If that doesn't help, please give us more details about what you're trying to achieve.