如何清理TreeView中具有相同文本属性的treenodes

本文关键字:文本 属性 treenodes 何清理 TreeView | 更新日期: 2023-09-27 18:14:07

我有一个TreeView,它将填充一些节点。问题是,这些节点可以具有不同的TagName属性,但其中一些节点可以具有相同的Text属性。

我想从上面的每个节点中只有一个节点,所以TreeView将通过Text具有唯一的节点。

我试图使所有节点的列表,然后过滤它们,然后将新的列表添加到TreeView。这是我的方法,我注释了不能编译的行。

        //Remove Duplicated Nodes
        List<TreeNode> oldPinGrpNodes = new List<TreeNode>();
        List<TreeNode> newPinGrpNodes = new List<TreeNode>();
        TreeNode tempNode;

        foreach (TreeNode node in tvPinGroups.Nodes)
        {
            oldPinGrpNodes.Add(node);
        }
        foreach (TreeNode node in oldPinGrpNodes)
        {
            if (newPinGrpNodes.Contains(node.Text)) continue; //this does not compile!
            //How to do a check in the IF statement above?
            //Continue with adding the unique pins to the newList
        }

或者如果你有更好的主意请告诉我!

如何清理TreeView中具有相同文本属性的treenodes

您是否尝试过以下Linq查询,而不是您的检查?

if (newPinGrpNodes.Any(n => n.Text == node.Text)) continue;

if(newPinGrpNodes.Any(n => n.Text==node.Text)) continue;

    foreach (TreeNode node in oldPinGrpNodes)      
 {        
 if ( from m in  newPinGrpNodesLookup  where m.text=node.Text select m).first ==null)
  continue; 
 } 

试试这个。我在System.Linq中使用ToLookup扩展方法:

//Remove Duplicated Nodes
      List<TreeNode> oldPinGrpNodes = new List<TreeNode>();
      Dictionary<string, TreeNode> newPinGrpNodes = new Dictionary<string, TreeNode>();
      TreeNode tempNode;

      foreach (TreeNode node in tvPinGroups.Nodes)
      {
        oldPinGrpNodes.Add(node);
      }
      foreach (TreeNode node in oldPinGrpNodes)
      {
        if (newPinGrpNodes.ContainsKey(node.Text)) continue; //this does not compile!
        //How to do a check in the IF statement above?
        //Continue with adding the unique pins to the newList
        // do something like
        newPinGrpNodes.Add(node.Text, node);
      }

至于你的编译错误,newPinGrpNodes - TreeNode类型的集合,你试图在那里搜索string

更新:为了提高性能,最好使用Dictionary来搜索条目:Dictionary<string, TreeNode>而不是List<TreeNode>