gpt4 book ai didi

C# 闭包,为什么循环变量是通过引用捕获的?

转载 作者:行者123 更新时间:2023-12-04 02:33:05 29 4
gpt4 key购买 nike

在此示例中,我尝试按值传递,但传递的是引用。

for (int i = 0; i < 10; i++)
{
Thread t = new Thread(() => new PhoneJobTest(i);
t.Start();
}

这可以像这样补救:
 for (int i = 0; i < 10; i++)
{
int jobNum = i;
Thread t = new Thread(() => new PhoneJobTest(jobNum);
t.Start();
}

这是怎么回事?为什么原始示例传递引用?

最佳答案

嗯,这就是 C# 的工作方式。语句中的 lambda 表达式构造了一个词法闭包,它存储对 i 的单个引用。即使在循环结束后仍然存在。

为了补救它,你可以只做你做过的事情。

请随时在网络上阅读有关此特定问题的更多信息;我的选择是 Eric Lippert's discussion here.

关于C# 闭包,为什么循环变量是通过引用捕获的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1930133/

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