2014-11-21 88 views
0

我建立了一個樹狀結構,並有同時在這個問題Traversing a Tree Structure遍歷樹的結構和作用

我想實現與所述樹節點類的動作的方法來解決它的幾個問題。我很難理解如何做到這一點並實施它。我到目前爲止是:

  internal void Traverse(Action<TreeNode<T>> action) 
      { 
       action(TreeNode<T>); 
       foreach (var child in this.children) 
        child.Traverse(action); 
      } 

任何解釋和幫助將不勝感激。

我收到錯誤:

錯誤667樹節點」是‘型’,而是使用類似‘變量’

錯誤668‘System.Collections.Generic.KeyValuePair>’不包含'Traverse'的定義和沒有擴展方法'Traverse'接受'System.Collections.Generic.KeyValuePair>'類型的第一個參數可以被找到(你是否缺少using指令或程序集引用?)

回答

0

in the第一行,你需要傳遞一個變量。
基本上,呼叫動作就像你一個reglular功能:

action(myTreeNode) 

第二個錯誤是因爲你忘了選擇從字典中的「價值」。

 internal void Traverse(Action<TreeNode<T>> action) 
     { 
     action(this); 
     foreach (var child in this.children.Values) 
      child.Traverse(action); 
     } 

我已經實現了這樣的功能,但問題是,你正在鎖定自己的一種類型的遍歷。我建議你堅持使用foreach來代替,這樣你就可以使用LINQ修改你的遍歷了。在你上一篇文章中,你展示了你讓你的樹實現了IEnumerable。這就是你需要啓用LINQ的全部內容。

所以,你可以實現你的現行規定是這樣的:

foreach (var node in MyTree) 
{ 
    // do stuff to node here 
{ 

而在未來,你可以做很酷的事情是這樣的:

foreach (var node in MyTree.Where(n => n.Type == somethingOfInterest)) 
{ 
    // do stuff to node here 
{ 
+0

謝謝。這工作,但我沒有得到行動(這)的一部分。是的,我瞭解字典錯誤的值部分。謝謝。 – PBrenek 2014-11-21 01:07:15

+1

我認爲Traverse是TreeNode 類的成員。 – 2014-11-21 02:14:28

+0

謝謝。那麼你是否建議我將Traverse方法從TreeNode類中取出並放到Tree類中? – PBrenek 2014-11-21 15:36:49