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 框架的新手,因此非常感谢您的帮助。
使用 Linq 或许可以通过设置来实现预期的结果
currentNode.Nodes = currentNode.Nodes.Where( n => SomeCondition( n ) ).ToList();
Run Code Online (Sandbox Code Playgroud)
或类似的东西,所以不需要显式迭代。一个不太优雅的解决方案是使用显式for
-loop 向后运行,以便循环索引不会变为无效。但是,当有更结构化的方法可用时,我会考虑这种不好的做法。
归档时间: |
|
查看次数: |
3739 次 |
最近记录: |