怎么在C#循环中捕获局部变量(云服务器、云主机、高防IP、高防服务器、香港服务器、美国服务器,开发技术)

时间:2024-05-06 04:44:40 作者 : 石家庄SEO 分类 : 开发技术
  • TAG :

    %E6%80%8E%E4%B9%88%E5%9C%A8C%23%E5%BE%AA%E7%8E%AF%E4%B8%AD%E6%8D%95%E8%8E%B7%E5%B1%80%E9%83%A8%E5%8F%98%E9%87%8F

我遇到了一个有趣的问题,它的代码大概是这样的。

我的期望输出是 0,2,4,6,8,但它最终输出的是五个 10,看起来像是这些 action 上下文捕获的都是同一个变量。

请问是否有变通的方法实现我要的预期结果呢?

变通方法就是在你的 loop 循环体中使用一个中间变量,并将其送入到 lambda 体中,参考如下代码:

其实这种情况在多线程下也同样会发生,比如下面的代码:

你以为会打印出 1,2,3,4,5,最后的结果非常有趣,在我这里的输出结果是:2,1,3,3,4 ,你那边的结果肯定又不一样了。

唯一的解决方案就是使用 局部变量,修改后的代码如下:

可能有很多朋友不知道为什么加了一个 variable1 变量之后,代码就正确的,要想分析,可以看 C# 生成的 IL 代码。

可以清楚的看到,那个所谓的 variable1 成了匿名类 c__DisplayClass0_0 下的字段了,而且foreach循环中每次都是new的,所以这个字段必然不一样,这也就保证了正确的结果。

本文:怎么在C#循环中捕获局部变量的详细内容,希望对您有所帮助,信息来源于网络。
上一篇:怎么通过Docker制作wsl的tar文件下一篇:

8 人围观 / 0 条评论 ↓快速评论↓

(必须)

(必须,保密)

阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18