我有一个foreach
循环,用于在C#中迭代treeView
的不同级别,其简化版本如下:
foreach (TreeNode childNode in currentNode.Nodes)
{
if (!someCondition)
{
currentNode.Remove();
}
}
但问题在于,当一个节点(例如从节点列表中的节点1、节点2、节点3和节点4)被移除时,列表变短了,
foreach
循环会跳过一个迭代(例如,如果要删除节点2,则列表变为节点1、节点3和节点4,下一个foreach
循环考虑的节点将是节点4而不是节点3)。这是因为框架将这些节点存储在数组/列表中,所以我想知道是否有可能使foreach
循环在我想从树中删除一个节点时向后退一次迭代。我对.NET框架还很陌生,所以非常感谢您的帮助。
currentNode.Remove()
,您的迭代器可能会完全中断:在迭代时更改序列并不保证能够继续迭代。为什么不在确定要删除的内容之后再执行删除操作呢? - Marc Gravell