我已经构建了一个树结构,并且在问题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;的第一个参数。可以找到(你错过了使用指令或程序集引用吗?)
答案 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
{