gpt4 book ai didi

C# lambda 使用局部变量

转载 作者:太空狗 更新时间:2023-10-30 00:04:25 25 4
gpt4 key购买 nike

class Program
{
static Action act = null;

static void Main(string[] args)
{
Test();
act();
act();
Test();
act();
}

static void Test()
{
int count = 0;

if(act == null) act = () => Console.Write(++count + " ");
}
}

结果:1 2 3 为什么?

if 删除 [ if(act == null) ]结果:1 2 1

最佳答案

目前,您只能创建一个委托(delegate)实例。这会捕获第一次调用 Test 方法时声明的局部变量。

由于捕获它的委托(delegate),该局部变量有效地延长了生命周期。每次调用委托(delegate)时,它都会递增相同的变量。

当您删除 if (act == null) 条件时,每次调用 Test 时都会创建一个新委托(delegate),这意味着它会捕获不同的 count 局部变量,每次从0开始。您正在调用 Test() 两次,并且通过第一次调用创建的委托(delegate)被调用两次(输出 1 然后 2)。通过第二次调用创建的委托(delegate)仅被调用一次(输出为 1)。

关于C# lambda 使用局部变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58056836/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com