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

标签 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 表达式本身可以更新捕获的变量(在本例中为“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/

相关文章:

Java 8 Streams : why does Collectors. toMap 对于带有通配符的泛型表现不同?

C# ASP.NET CSS 样式

Haskell 函数组合 - (a -> b) -> (a -> c) -> (b -> c -> d) -> (a -> d)

amazon-web-services - AWS Api网关+ Lambda +自定义域(Route53)缺少身份验证 token 问题

java - 使用 Spring EL 将值设置为 lambda

c++ - 在 lambda 中包装并执行 packaged_task

c# - 如何将 Windows 服务托管到 Windows Azure

c# - 获取具有深层相关实体的对象

c# - ProtectSection 和 RsaProtectedConfigurationProvider key 去哪里了?

c# - 使用套接字的简单 Http 代理 : Questions