Как «развернуть» «рекурсивную» структуру

Не знаю, как это назвать, но скажем, у вас есть класс, который выглядит так:

class Person
{
    public string Name;
    public IEnumerable Friends;
}

У тебя тогда есть человек и ты хочешьраскатать» эта структура рекурсивно, так что вы получите единый список всех людей без дубликатов.

Как бы вы это сделали? Я уже сделал что-то, что, кажется, работает, но мне любопытно посмотреть, как это сделают другие, особенно если есть что-то встроенное в Linq, которое вы можете использовать умным способом для решения этой маленькой проблемы :)

Вот мое решение:

public static IEnumerable SelectRecursive(this IEnumerable subjects, Func selector)
{
    // Stop if subjects are null or empty
    if(subjects == null)
        yield break;

    // For each subject
    foreach(var subject in subjects)
    {
        // Yield it
        yield return subject;

        // Then yield all its decendants
        foreach (var decendant in SelectRecursive(selector(subject), selector))
            yield return decendant;
    }
}

Будет использоваться что-то вроде этого:

var people = somePerson.SelectRecursive(x => x.Friends);

Ответы на вопрос(6)

Ваш ответ на вопрос