从树视图节点中删除子节点时出现空例外

时间:2015-12-27 18:26:50

标签: c# .net winforms treeview nullreferenceexception

我有以下函数从树视图控件中删除特定节点

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

我不期待一个空项,因为我迭代一个节点的子节点,当然它们不能为空。

可能是什么问题,我认为当我从树中删除一些节点时,它会影响函数。

1 个答案:

答案 0 :(得分:4)

删除项目时,会破坏枚举。

为防止这种情况发生,请按以下相反的顺序循环:

for(int i = tn.Nodes.Count - 1 ; i >= 0 ; i--)
{
    TreeNode item = tn.Nodes[i];
   //....
}

这样可以确保首先删除索引较高的项目,因此枚举不会中断。