如何从自己调用Func
函数?
例如:
Func<int, int> f = x => {
// do stuff
if (x > 5) { return f(x); }
// do other stuff
};
答案 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