这让我有点疯狂。我试图创建一个lambda表达式,它将基于布尔值反转我的for循环。因此,如果布尔值为真,那么我将使用加法进行循环变量更新,反之亦然。
这给我留下了一个像这些
之类的东西Func<int, int> dirFunc = (n) => n++;
Func<int, int> dirFunc = (n) => n--;
虽然我会得到奇怪的循环错误,但我终于意识到++
和--
似乎不能在lambdas中工作,或者我认为它们的工作方式。
为什么会这样?
答案 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
的值