如何从自己调用Func
函数?调用自己的函数变量
例如:
Func<int, int> f = x => {
// do stuff
if (x > 5) { return f(x); }
// do other stuff
};
如何从自己调用Func
函数?调用自己的函数变量
例如:
Func<int, int> f = x => {
// do stuff
if (x > 5) { return f(x); }
// do other stuff
};
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-04 00:01:33
简单的方法是创建变量,其分配null
,并然后用它在你的拉姆达:
Func<int, int> f = null;
f = x => {
// do stuff
if (x > 5) { return f(x); }
// do other stuff
};
通过它来的时候实际上调用f
中的委托,它将被分配给一个非空值。
如果你愿意,你也可以按照这个(理论重)blog entry所示的方法。
+1。链接到另一个Y定点组合器文章http://blogs.msdn.com/b/wesdyer/archive/2007/02/02/anonymous-recursion-in-c.aspx – 2013-05-03 23:52:59
像这样的事情http://stackoverflow.com/a/16361037/1906557? – I4V 2013-05-03 23:21:49
你可以修改函数来不需要递归。 – 2013-05-04 00:03:36