【发布时间】:2009-11-06 01:52:33
【问题描述】:
考虑以下c#中的扩展方法,Traverse:
IEnumerable<T> Traverse<T>( this IEnumerable<T> source,
Func<T, IEnumerable<T>> fnRecurse );
此方法允许人们通过 T 定义的树以及导致 T 返回其子节点的任何函数递归。
现在考虑 T 的以下实现:
class Node
{
public string Name;
public List<Node> Children;
}
我的目标是编写返回 IEnumerable 的最短函数 包含此树中每个节点的完全限定路径。比如:
var node = GetParentNode();
return node.Traverse( node => node.Children )
.Select( node => GetParentName(node) + ":" + node.Name );
显然,将 Parent 属性添加到 Node 会使问题变得微不足道。相反,我想以某种方式在仿函数中构建我的父字符串。我认为这在 C++ 中不会太难,但我不知道如何在 C# 中做到这一点。有什么想法吗?
【问题讨论】:
标签: c# linq functional-programming