2015-11-01 87 views
0

在C#中,如果我有一个T类型的CollectionBase,并且CollectionBase中的每个项目都可以具有相同类型T的子类CollectionBase,那么如何在不使用递归函数的情况下获得所有类型T对象的列表?如何获取CollectionBase项目的列表?

LINQ是否有这个功能?

在此先感谢。

+0

孩子的物品可以有孩子等吗?你为什么不想使用递归? – Blorgbeard

+0

请参阅此[问题](http://stackoverflow.com/questions/4814242/linq-recursion-function)。 – Han

+0

你能告诉我们一些CollectionBase的代码吗?我asume SelectMany是你在找什么。 –

回答

0

韦斯代尔实际上写了一个很好的话题,有一个look

至于你的情况,我认为你需要一个迭代器,大概是这样的:

public static IEnumerable<T> Flatten<T>(this IEnumerable<T> e, Func<T,IEnumerable<T>> f) 
{ 
    return e.SelectMany(c => f(c).Flatten(f)).Concat(e); 
} 

这是回答是从here拍摄。

编辑:我只记得你也可以traverse这棵树。

public static IEnumerable<T> Traverse<T>(T item, Func<T, IEnumerable<T>> childSelector) 
{ 
    var stack = new Stack<T>(); 
    stack.Push(item); 
    while (stack.Any()) 
    { 
     var next = stack.Pop(); 
     yield return next; 
     foreach (var child in childSelector(next)) 
     stack.Push(child); 
    } 
}