遍历树结构和动作

时间:2014-11-21 00:45:51

标签: c# tree action

我已经构建了一个树结构,并且在问题Traversing a Tree Structure

中解决了一些问题。

我想在TreeNode类中实现一个带有操作的方法。我很难理解如何做到这一点并实施它。到目前为止我所拥有的是:

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

非常感谢任何解释和帮助。

我收到错误:

错误667 TreeNode&#39;是一种&#39;类型&#39;但用作变量&#39;

错误668&#39; System.Collections.Generic.KeyValuePair&gt;&#39;不包含&#39; Traverse&#39;的定义没有延伸方法&#39; Traverse&#39;接受类型&#39; System.Collections.Generic.KeyValuePair&gt;&#39;的第一个参数。可以找到(你错过了使用指令或程序集引用吗?)

1 个答案:

答案 0 :(得分:0)

在第一行,你需要传递一个变量 基本上,呼叫操作就像您使用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
{