Как я могу получить список элементов CollectionBase?

В C#, если у меня есть CollectionBase типа T, и у каждого элемента в CollectionBase может быть дочерний CollectionBase того же типа T, как я могу получить список всех объектов типа T без использования рекурсивной функции?

У LINQ есть функция, чтобы сделать это?

Заранее спасибо.

1 ответ

Уэс Дайер на самом деле написал хорошую тему на эту тему.

Что касается вашего случая, я думаю, вам понадобится итератор, вероятно, что-то вроде этого:

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);
    }
}
Другие вопросы по тегам