如何清理TreeView中具有相同文本属性的treenodes
本文关键字:文本 属性 treenodes 何清理 TreeView | 更新日期: 2023-09-27 18:14:07
我有一个TreeView,它将填充一些节点。问题是,这些节点可以具有不同的Tag
和Name
属性,但其中一些节点可以具有相同的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
}
或者如果你有更好的主意请告诉我!
您是否尝试过以下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>
。