【发布时间】:2014-09-10 14:13:01
【问题描述】:
我正在尝试编写一个扩展方法,该方法应该遍历对象图并返回所有访问过的对象。
我不确定我的方法是否是最好的,所以请对此发表评论。产量也在煎炸我的大脑......我相信答案很明显:/
型号
public class MyClass
{
public MyClass Parent {get;set;}
}
方法
public static IEnumerable<T> SelectNested<T>
(this T source, Func<T, T> selector)
where T : class
{
yield return source;
var parent = selector(source);
if (parent == null)
yield break;
yield return SelectNestedParents(parent, selector).FirstOrDefault();
}
用法
var list = myObject.SelectNested(x => x.Parent);
问题
它几乎可以工作了。但它只访问 2 个对象。它自己和父母。
因此,鉴于此图 c -> b -> a 从 c 开始。 c, b 被返回,这不是我想要的。
我要找的结果是b, c
【问题讨论】:
标签: c# recursion extension-methods yield-return