Question

Est-il possible de faire récursion avec un délégué Func? J'ai ce qui suit, qui ne compile pas parce que le nom du Func n'est pas portée ...

Func<long, long, List<long>, IEnumerable<long>> GeneratePrimesRecursively = (number, upperBound, primeFactors) => 
{
    if (upperBound < number)
    {
        return primeFactors;
    }
    else
    {
        if (!primeFactors.Any(factor => number % factor == 0)) primeFactors.Add(number);
        return GeneratePrimesRecursively(++number, upperBound, primeFactors); // breaks here.
    }
};
Était-ce utile?

La solution

Comme ceci:

Func<...> method = null;
method = (...) => {
    return method();
};

Votre code produit une erreur parce que vous essayez d'utiliser la variable avant de l'attribuer.
Votre expression lambda est compilé avant la variable est définie (la variable ne peut être réglé à une expression complète), donc il ne peut pas utiliser la variable.
Réglage de la variable null première évite ce problème, car il sera déjà réglé lorsque l'expression lambda est compilé.

une approche plus puissante, vous pouvez utiliser un YCombinator .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top