如何获取CollectionBase项目列表?

时间:2015-11-01 23:56:59

标签: c# linq collectionbase

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

LINQ有功能吗?

提前致谢。

1 个答案:

答案 0 :(得分:0)

Wes Dyer实际上写了一个很好的主题,有一个here

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

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);
}

答案取自traverse

编辑:我只记得你也可以{{3}}树。

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);
    }
}