函数变量调用自身

时间:2013-05-03 23:20:05

标签: c# recursion

如何从自己调用Func函数?

例如:

 Func<int, int> f = x => {
      // do stuff
      if (x > 5) { return f(x); }
      // do other stuff
 };

2 个答案:

答案 0 :(得分:6)

简单的方法是创建变量,为其分配null然后在lambda中使用它:

Func<int, int> f = null;
f = x => {
    // do stuff
    if (x > 5) { return f(x); }
    // do other stuff
};

在实际调用f中的委托时,它将被分配给非空值。

如果您愿意,也可以按照此(重理论)blog entry中所示的方法进行操作。

答案 1 :(得分:1)

dlev 的答案相当简单,但您也可以这样做:

首先声明一个接受自身作为参数的委托类型:

public delegate TResult RecursiveFunc<TParam, TResult>(
    TParam param1, 
    RecursiveFunc<TParam, TResult> func);

注意:代表当然不必是通用的。

您现在可以像这样创建lambda表达式:

RecursiveFunc<int, int> f = (x, g) => {
    // do stuff
    if (x > 5) { return g(x, g); }
    // do other stuff
};

f(123, f); // Invoke recursively