【发布时间】:2014-07-15 18:08:07
【问题描述】:
我有一个Foo 类型的对象列表。每个Foo 对象都包含对其父对象的引用:
public class Foo
{
public Foo Parent { get; set; }
}
(如果Parent 为空,则Foo 被视为“根”节点。)如您所见,这意味着一种“自下而上”的树层次结构。
我想通过将我的 Foo 对象包装在一个名为 TreeItem 的新类中来颠倒这个 child->parent 关联;
public class TreeItem<T>
{
public T Item { get; set; }
public IEnumerable<TreeItem<T>> Children { get; set; }
}
如图所示,这会给我一个更自然的“自上而下”树层次结构。我相信这将允许更容易的数据绑定,例如。在 WPF TreeView.
是否有简洁的 Linq 语句可以获取 List<Foo>,找到每个 Foo 对象的子对象,并吐出相应转换的 TreeItem<Foo> 列表?
除了 Linq 查询,最简单的算法是什么?
奖励:您会使用什么词或搜索词来描述这种“树翻转”转换?
【问题讨论】: