通过文本过滤TreeView

时间:2018-11-29 11:26:59

标签: c# winforms

我有一些TreeView,我想按Text字段进行过滤。我有实现方法。

private bool FilterTreeNode(string searchText, TreeNode node)
{
    foreach (TreeNode childNode in node.Nodes)
    {
        var childNodeResult = FilterTreeNode(searchText, childNode);

        if (childNodeResult == false)
        {
            node.Nodes.Remove(childNode);
        }
    }

    return node.Nodes == null || node.Nodes.Count < 1
        ? node.Text.ToLower().Contains(searchText)
        : true;
}

在其中一次迭代中,此方法引发异常,因为该方法获取node = null。 我在哪里可以犯错误?

1 个答案:

答案 0 :(得分:0)

我认为问题在于,您正在childNode循环中从要迭代的集合中删除foreach

您可以通过在继续操作之前在方法顶部检查节点是否为null来解决此问题,但是我认为通常来说,建立一个包含所需项目的新TreeNode可能更可靠。保留并返回,而不是从原始TreeNode中删除不需要的项目?