在 C# 中的 foreach 循环中返回一次迭代

Ali*_*aei 3 .net c# iteration collections foreach

我有一个foreach循环,treeView它在 C#中迭代不同级别的 a ,其简化版本如下所示:

foreach (TreeNode childNode in currentNode.Nodes)
{
    if (!someCondition)
    {
        currentNode.Remove();                    
    }
}   
Run Code Online (Sandbox Code Playgroud)

但问题是,当一个节点(例如从节点 1、节点 2、节点 3 和节点 4 的列表中)被删除时,列表会变短,foreach循环会跳过一次迭代(例如,如果要删除节点 2,列表将变为节点1 、node3 和 node4,foreach循环考虑的下一个节点将是 node4 而不是 node3)。这是因为框架将这些节点存储在一个数组/列表中,所以我想知道foreach当我想从树中删除一个节点时,是否可以让循环返回一次迭代。

我是 .NET 框架的新手,因此非常感谢您的帮助。

Cod*_*dor 5

使用 Linq 或许可以通过设置来实现预期的结果

currentNode.Nodes = currentNode.Nodes.Where( n => SomeCondition( n ) ).ToList();
Run Code Online (Sandbox Code Playgroud)

或类似的东西,所以不需要显式迭代。一个不太优雅的解决方案是使用显式for-loop 向后运行,以便循环索引不会变为无效。但是,当有更结构化的方法可用时,我会考虑这种不好的做法。