Mar*_*son 5 .net foreach linked-list
我可以安全地将节点添加到foreach语句中的LinkedList容器中吗?如果我使用while循环有什么区别吗?或者它永远不会被允许并且可能导致一些问题?
foreach(var node in myList)
{
if(condition)
myList.AddLast(new MyNode());
}
Run Code Online (Sandbox Code Playgroud)
它会一直有效吗?
在枚举时,您无法修改集合.
来自以下文档LinkedList<T>.GetEnumerator:
只要集合保持不变,枚举器仍然有效.如果对集合进行了更改(例如添加,修改或删除元素),则枚举数将无法恢复,并且其行为未定义.
在实践中,我相信它总会抛出一个InvalidOperationException,尽管行为正式未定义.
编辑:您在评论中询问while循环是否有帮助...使用GetEnumerator/ MoveNext/ 的while循环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;
}
Run Code Online (Sandbox Code Playgroud)
据我所知,这是完全安全和可预测的.您始终可以向节点询问其下一个节点.如果您正好在查看尾节点并添加另一个节点,那么当您要求"下一个"时,您将获得新的尾节点.
如果这没有帮助,请向我们提供有关您要实现的目标的更多详细信息.
| 归档时间: |
|
| 查看次数: |
1122 次 |
| 最近记录: |