我有以下函数从树视图控件中删除特定节点
private void PruneTree(TreeNode tn)
{
foreach (TreeNode item in tn.Nodes)
{
PruneTree(item);
}
if (tn.BackColor == Color.LightCoral && tn.Nodes.Count == 0)
{
tn.Remove();
}
}
我在树视图根节点上调用它,但它会在NullReferenceException
处为tn
抛出tn.Nodes
。
我不期待一个空项,因为我迭代一个节点的子节点,当然它们不能为空。
可能是什么问题,我认为当我从树中删除一些节点时,它会影响函数。
答案 0 :(得分:4)
删除项目时,会破坏枚举。
为防止这种情况发生,请按以下相反的顺序循环:
for(int i = tn.Nodes.Count - 1 ; i >= 0 ; i--)
{
TreeNode item = tn.Nodes[i];
//....
}
这样可以确保首先删除索引较高的项目,因此枚举不会中断。