我试图理解为什么在下面的示例中,“fac”的值是值 2,即使在对值 3 进行了赋值之后也是如此。
public class Program
{
public static void Main()
{
int fac = 1;
Func<int, int> mul = (n) =>
{
fac = 2;
return fac * fac;
};
fac = 3;
Console.WriteLine(mul(fac));
Console.WriteLine(fac);
}
}
结果:
4
2
我知道 lambda 表达式本身可以更新捕获的变量(在本例中为“fac”),但在这种程度上似乎令人困惑。
最佳答案
...the value of 'fac' is the value 2, even after there's an assignment to the value 3.
此声明并不是故事的全部。
首先,fac
被赋值为 1。接下来,fac
被赋值为 3。当您调用 mul()
时, fac
被分配给 2。
在所有情况下,都会修改相同的变量 fac
,并且 mul()
内部的赋值直到 mul()
才会发生叫做。
关于C# lambda 表达式和捕获外部变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49464669/