C# все комбинации

Имеется вот такой вот классный пример получения всех комбинаций с повторами да ещё заданной длинны
(при использовании уберите пробелы между угловыми скобками и остальным текстом)

static IEnumerable< IEnumerable< T > > GetAllCombinations< T >(IEnumerable< T > list, int length)
{
    if (length == 1) return list.Select(t => new T[] { t });

    return GetAllCombinations(list, length - 1)
        .SelectMany(t => list, (t1, t2) => t1.Concat(new T[] { t2 }));
}

Использовать данный код можно например так:

Console.WriteLine(
    string.Join(", ",
        GetAllCombinations("abcde".ToCharArray(), 2).Select(list => string.Join("", list)) // извлечение чтобы напечатать
    )
);

Автор кода: stackoverflow.com/users/1251423/pengyang