2016-04-29 7 views
0

Ich habe folgende treeview:rekursive Funktion kann den Knoten finden und den Wert null zurück

-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 

Die "ID", die ich verwende ist genau die Reihenfolge des Kindes und es ist bereits im Tag des Knotens. Zum Beispiel möchte ich nach dem Knoten -node3.1.2 suchen und den Knoten mit itemId = "3/1/2" verwenden, den ich über Tag übergeben habe.

Hier ist mein Code:

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; 
} 

Wenn ich den Code leite dann hat es immer null als Ausgabe. Ich bin verwirrt, warum ich es habe? Darf ich Ihre Hilfe fragen?

+2

Haben Sie versucht, über den Code debuggen? Dann können Sie sehen, was gerade passiert. –

+0

@tahatmat, yap, ich habe es getan. aber es konnte den Knoten nicht finden. –

+0

Welchen Wert erhalten Sie, wenn Sie "int c = string.Compare (itemId, Node_ID)" verwenden? Wenn dies 0 nicht zurückgibt, sind Ihre Strings irgendwie anders und Sie müssen in die Werte von ihnen schauen und sehen warum. –

Antwort

0

Nach vielen Zeittests fand ich die richtige Antwort. Danke für deine Kommentare, die mir sehr geholfen haben. Weil es fehlgeschlagen ist, als die IF nicht wahr war, habe ich auch noch einen Teil hinzugefügt und herausgefunden, dass es korrekt ist.

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