【问题标题】:How can I get a list of CollectionBase items?如何获取 CollectionBase 项目的列表?
【发布时间】:2015-11-01 23:56:59
【问题描述】:

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

LINQ 有这样的功能吗?

提前致谢。

【问题讨论】:

  • 子项可以有子项等吗?为什么不想使用递归?
  • 看到这个question
  • 你能给我们展示一些 CollectionBase 的代码吗?我认为 SelectMany 是您正在寻找的。​​span>

标签: c# linq collectionbase


【解决方案1】:

Wes Dyer 实际上写了一个很好的主题,有一个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);
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-22
    • 1970-01-01
    • 2012-06-20
    • 2019-01-25
    • 1970-01-01
    • 2019-12-23
    相关资源
    最近更新 更多