我试图理解为什么,在下面的例子中,' 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表达式本身可以更新捕获的变量(在这种情况下&#39; fac&#39;)但是在这种程度上看起来很混乱。
答案 0 :(得分:4)
......'fac'的值是值2,即使在赋值为3之后也是如此。
这句话不是全部。
首先,fac
被分配给1.接下来,fac
被分配给3.当您致电mul()
时,fac
被分配给2.
在所有情况下,修改相同的变量fac
,并且在调用mul()
之前不会发生mul()
内的分配。