小编Mac*_*lsk的帖子

在 C# 中使用 lambdas 和匿名方法进行闭包

我想基于两个示例提出与维护局部变量的闭包相关的问题:

public static Func<int, int> F2()
{
    var local = 1;
    Func<int, int> inc = delegate (int x)
    {
        local = local + 1;
        return x + local;
    };
    return inc;
}
Run Code Online (Sandbox Code Playgroud)

现在,调用它会呈现正确的 Closure 工作机制

var inc2 = F2();
Console.WriteLine(inc2(10));
Console.WriteLine(inc2(10));
Run Code Online (Sandbox Code Playgroud)

输出结果:

12
13
Run Code Online (Sandbox Code Playgroud)

现在,替代版本:

public static Func<int, int> F1 = i =>
{
    var local = 1;
    Func<int, int> FInn = x =>
    {
        local++;
        return local + x;
    };
    return FInn(i);
};
Run Code Online (Sandbox Code Playgroud)

调用这个:

    var inc1 = F1;
    Console.WriteLine(inc1(10)); …
Run Code Online (Sandbox Code Playgroud)

c# closures

2
推荐指数
1
解决办法
59
查看次数

标签 统计

c# ×1

closures ×1