Bạn không thể sửa đổi bộ sưu tập khi đang liệt kê nó.
Từ docs for LinkedList<T>.GetEnumerator
:
Một điều tra viên vẫn có giá trị càng lâu càng bộ sưu tập vẫn không thay đổi. Nếu thay đổi được thực hiện cho bộ sưu tập, chẳng hạn như thêm, sửa đổi hoặc xóa yếu tố, điều tra viên là không hợp lệ vô hiệu và hành vi của chúng tôi là không xác định.
Trong thực tế, tôi tin rằng nó sẽ luôn ném một InvalidOperationException
, mặc dù hành vi chính thức không được xác định.
EDIT: Bạn hỏi trong một chú thích cho dù một vòng lặp while
sẽ giúp ... một vòng lặp trong khi sử dụng GetEnumerator
/MoveNext
/Current
sẽ không, nhưng điều này sẽ:
LinkedListNode<MyNode> current = myList.First;
while (current != null)
{
if (condition) // use current.Value to get the value
{
myList.AddLast(new MyNode());
}
current = current.Next;
}
Theo như tôi nhận thức, điều đó hoàn toàn an toàn và có thể dự đoán được. Bạn luôn có thể yêu cầu một nút cho nút tiếp theo của nó. Nếu bạn tình cờ nhìn vào nút đuôi và thêm nút khác, bạn sẽ nhận được nút đuôi mới khi bạn yêu cầu "tiếp theo".
Nếu điều đó không có tác dụng, vui lòng cung cấp cho chúng tôi thêm chi tiết về những gì bạn đang cố gắng đạt được.
Nguồn
2010-08-08 19:26:37
Hoàn toàn an toàn là một vòng lặp vô tận, căng thẳng và OOM nếu nút mới khớp với điều kiện. –