c# - 从 TreeView 节点中删除子节点时出现空异常

标签 c# .net winforms treeview nullreferenceexception

<分区>

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

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

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

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

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

最佳答案

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

为了防止这种情况发生,像这样以相反的顺序循环:

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

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

关于c# - 从 TreeView 节点中删除子节点时出现空异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34483471/

相关文章:

c# - 将 C Union 转换为 C#(未正确对齐)

c# ->net Reflector 中的 $ArrayType$16008 是什么?

c# - 斐波那契程序未完成执行

c# - 将图像添加到 ListView 中的第一项?

c# - 调整 Infragistics UltraGrid 的大小以完美适应其内容

c# - 在 C# 中覆盖异常消息

c# - c#中的参数验证、存储过程和数据访问层

c# - 调用 UserControl 不起作用

c# - 在 Entity Framework 中使用 context.SaveChanges()

c# - 箭头键的键码