从树视图节点中删除子节点时出现空异常

Null exception at removing a child node from a tree view node

我有以下功能可以从树视图控件中删除特定节点

private void PruneTree(TreeNode tn)
{          
    foreach (TreeNode item in tn.Nodes)
    {                        
        PruneTree(item);            
    }
    if (tn.BackColor == Color.LightCoral && tn.Nodes.Count == 0)
    {
        tn.Remove();
    }
}

我在树视图根节点上调用它,但它为 tn.Nodes 处的 tn 抛出 NullReferenceException

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

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

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

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

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

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