Combinaison Générateur de Linq

Est-il possible de créer un peu de Linq qui génère une Liste contenant toutes les combinaisons possibles d'une série de chiffres??

Si vous entrez "21", il serait de générer une liste avec les éléments:

list[0] = "21"
list[1] = "22"
list[2] = "11"
list[3] = "12"

(Pas nessesarily dans cet ordre)

- Je comprendre que vous pouvez utiliser la plage à faire des choses comme:

List<char> letterRange = Enumerable.Range('a', 'z' - 'a' + 1).Select(i => (Char)i).ToList(); //97 - 122 + 1 = 26 letters/iterations

Qui génère de l'alphabet de a-z. Mais je n'arrive pas à transférer ce savoir pour faire une combinaison générateur

J'ai été en mesure de le comprendre avec le code suivant, mais il semble trop encombrant et je suis sûr qu'il peut être fait avec quelques lignes. On ressent vraiment une mauvaise solution que j'ai fait.

Imaginer que j'ai appelé GetAllCombinations("4321") si elle contribue à

public static String[] GetAllCombinations(String s)
{
    var combinations = new string[PossibleCombinations(s.Length)];

    int n = PossibleCombinations(s.Length - 1);

    for (int i = 0; i < s.Length; i++)
    {
        String sub;
        String[] subs;

        if (i == 0)
        {
            sub = s.Substring(1); //Get the first number
        }
        else if (i == s.Length - 1)
        {
            sub = s.Substring(0, s.Length - 1);
        }
        else
        {
            sub = s.Substring(0, i) + s.Substring(i + 1); 
        }

        subs = GetAllCombinations(sub);

        for (int j = 0; j < subs.Length; j++)
        {
            combinations[i * n + j] = s[i] + subs[j];
        }
    }

    return combinations;
}
public static int PossibleCombinations(int n) //Combination possibilities. e.g 1-2-3-4 have 24 different combinations
{
    int result = 1;

    for (int i = 1; i <= n; i++)
        result *= i;

    return result;
}
InformationsquelleAutor CasperT | 2009-04-21