C#lambda表达式和捕获外部变量

时间:2018-03-24 12:26:49

标签: c# lambda

我试图理解为什么,在下面的例子中,' 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;)但是在这种程度上看起来很混乱。

1 个答案:

答案 0 :(得分:4)

  

......'fac'的值是值2,即使在赋值为3之后也是如此。

这句话不是全部。

首先,fac被分配给1.接下来,fac被分配给3.当您致电mul()时,fac被分配给2.

在所有情况下,修改相同的变量fac,并且在调用mul()之前不会发生mul()内的分配。