gpt4 book ai didi

.net - 在 foreach 中将节点添加到 LinkedList

转载 作者:行者123 更新时间:2023-12-04 17:41:12 26 4
gpt4 key购买 nike

我可以在 foreach 语句中安全地将节点添加到 LinkedList 容器吗?如果我使用while循环有什么区别吗?或者它永远不被允许并且会导致一些问题?

foreach(var node in myList)
{
if(condition)
myList.AddLast(new MyNode());
}

会吗 总是 工作?

最佳答案

在枚举集合时不能修改集合。

来自 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.



在实践中,我相信它总是会抛出 InvalidOperationException ,尽管官方未定义行为。

编辑:您在评论中询问是否是 while循环会有所帮助...使用 GetEnumerator 的 while 循环/ MoveNext/ Current不会,但这会:
LinkedListNode<MyNode> current = myList.First;
while (current != null)
{
if (condition) // use current.Value to get the value
{
myList.AddLast(new MyNode());
}
current = current.Next;
}

据我所知,这是完全安全和可预测的。你总是可以向一个节点询问它的下一个节点。如果您碰巧正在查看尾节点并添加另一个节点,那么当您要求“下一个”时,您将获得新的尾节点。

如果这没有帮助,请向我们提供有关您要实现的目标的更多详细信息。

关于.net - 在 foreach 中将节点添加到 LinkedList<T>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3435722/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com