2016-04-29 2 views
0

У меня есть следующие treeview:рекурсивная функция не может найти узел и возвращает нулевое значение

-node1 //ID=1 
    -node1.1 //ID=1/1 
    -node1.2 
-node2 
    -node2.1 
     -node2.1.1 //ID = 2/1/1 
    -node2.2 
    -node2.3 
-node3 
    -node3.1 
     -node3.1.1 
     -node3.1.2 //ID = 3/1/2 
    -node3.2 
     -node3.2.1 

"ID" который я использую точно порядок ребенка и уже в Tag узла. Например, я хочу найти узел -node3.1.2, и я использую узел с itemId = "3/1/2", который я прошел через Tag.

Вот мой код:

public TreeNode FromID(string itemId, TreeNode rootNode) 
{ 
    foreach (TreeNode node in rootNode.Nodes) 
    { 
     if (node.Tag != null) 
     { 
      var value = node.Tag as NodeTag; 
      string Node_ID = value.NodeID; 
      if (Node_ID.Equals(itemId)) return node; 
      TreeNode next = FromID(itemId, node); 
      if (next != null) return next; 
     } 
    } 
    return null; 
} 

Когда я бегу код, то он всегда null как выход. Я смущен, почему у меня это есть? Могу ли я попросить вас об этом?

+2

Вы пробовали отлаживать код? Затем вы можете увидеть, что происходит. –

+0

@tahatmat, yap, я сделал это. но он не смог найти «узел». –

+0

Какое значение вы получите, если вы делаете «int c = string.Compare (itemId, Node_ID);»? Если это не возвращает 0, то ваши строки как-то разные, и вам нужно изучить их значения и понять, почему. –

ответ

0

После многократного тестирования я нашел правильный ответ. Спасибо за ваши комментарии, которые мне очень помогли. Поскольку он не удался, когда IF не был прав, я добавил еще часть и выяснил, что это правильно.

..... 
else 
{ 
    TreeNode nodeChild = FindTn(node.Nodes, NodeID); 
    if (nodeChild != null) return nodeChild; 
}