如何获取CollectionBase项目的列表
本文关键字:CollectionBase 项目 列表 获取 何获取 | 更新日期: 2023-09-27 18:20:04
在C#中,如果我有一个类型为T的CollectionBase,并且CollectionBase中的每个项都可以有一个相同类型T的子CollectionBase,那么我如何在不使用递归函数的情况下获得所有类型T对象的列表?
LINQ有这样的功能吗?
提前谢谢。
Wes Dyer写了一个很好的主题,看看吧。
至于你的情况,我认为你需要一个迭代器,可能是这样的:
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);
}
这是从这里得到的答案。
编辑:我只记得你也可以遍历树。
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);
}
}