Как очистить TreeNode с тем же свойством Text в TreeView? - PullRequest
2 голосов
/ 10 ноября 2011

У меня есть 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
        }

Или, если у вас есть идея получше, пожалуйста, дайте мне знать!

Ответы [ 4 ]

2 голосов
/ 10 ноября 2011

пробовали ли вы следующий запрос Linq вместо чека?

if (newPinGrpNodes.Any(n => n.Text == node.Text)) continue;
1 голос
/ 10 ноября 2011
    foreach (TreeNode node in oldPinGrpNodes)      
 {        
 if ( from m in  newPinGrpNodesLookup  where m.text=node.Text select m).first ==null)
  continue; 
 } 
1 голос
/ 10 ноября 2011

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

1 голос
/ 10 ноября 2011

Попробуй это.Я использую ToLookup метод расширения в System.Linq:

//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<string, TreeNode> вместо List<TreeNode>.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...