0

C# で、T 型の CollectionBase があり、CollectionBase の各項目が同じ T 型の子 CollectionBase を持つことができる場合、再帰関数を使用せずにすべての T 型オブジェクトのリストを取得するにはどうすればよいでしょうか?

LINQ にはこれを行う機能がありますか?

前もって感謝します。

4

1 に答える 1

0

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

これはhereからの回答です。

編集:を横断することもできることを覚えています。

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);
    }
}
于 2015-11-02T13:57:32.423 に答える