1

如何Func从自身调用函数?

例如:

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

2 回答 2

6

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

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

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

如果您愿意,您也可以按照这个(理论重的)博客条目中显示的方法。

于 2013-05-03T23:22:26.530 回答
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
于 2013-05-03T23:29:28.723 回答