是否可以对Func委托(delegate)进行递归?我有以下内容,由于Func的名称不在范围内,因此无法编译...
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.
}
};
最佳答案
像这样:
Func<...> method = null;
method = (...) => {
return method();
};
您的代码产生错误,因为您在分配变量之前尝试使用该变量。
您的lambda表达式是在设置变量之前编译的(变量只能设置为完整的表达式),因此它不能使用该变量。
首先将变量设置为
null
可以避免此问题,因为在编译lambda表达式时已经设置了该变量。作为更强大的方法,您可以使用YCombinator。