为什么++和 - 不适用于lambda表达式?

时间:2016-02-18 14:19:45

标签: c# lambda

这让我有点疯狂。我试图创建一个lambda表达式,它将基于布尔值反转我的for循环。因此,如果布尔值为真,那么我将使用加法进行循环变量更新,反之亦然。

这给我留下了一个像这些

之类的东西
Func<int, int> dirFunc = (n) => n++;
Func<int, int> dirFunc = (n) => n--;

虽然我会得到奇怪的循环错误,但我终于意识到++--似乎不能在lambdas中工作,或者我认为它们的工作方式。

为什么会这样?

1 个答案:

答案 0 :(得分:4)

似乎对我工作正常,因为n++正在使用后缀增量运算符,它会在n递增之前返回dirFunc(2)的值,因此int返回2(如果你不#39;理解这一点我建议你阅读前缀和后缀增量运算符之间的区别。)

因为Func<int, int> dirFunc = n => n + 1; // OR Func<int, int> dirFunc = n => n - 1; for(var i = start; i < end; i = dirFunc(i)) { } 是值类型,所以lambda会获取值的副本而不是对变量的引用,因此您正在递增该副本。如果您希望引用变量,可以定义一个带有ref参数的新委托(参见Func / Action delegates with reference arguments/parameters or anonymous functions)。

我认为您最有可能想要以下内容:

i

请注意,我们使用dirFunc

中新增加/减少的结果在每次迭代中重新分配Canvas的值