![]() |
1
12
问题是基于为您的作用域生成的闭包… 同样的问题也会发生在for循环中,如果你这样重写它的话。( 坏代码! ):
问题是,当您关闭委托中的变量时(在您的情况下,
引入临时变量 里面 foreach循环将纠正以下问题:
为了更详细地讨论正在发生的事情,我建议阅读 Eric Lippert's blog post: "Closing over the loop variable considered harmful" . |
![]() |
2
3
这是因为您在闭包中使用的变量的范围。 埃里克·利珀特 nice blog post explaining this 在细节上,我认为其他人(乔恩·斯基特?)也写过博客。 |
![]() |
3
3
在您的
在for循环中,您要复制整数,以便每个线程都获得自己的值。 关于这个问题有一些很好的数据 here . |
![]() |
4
2
问题是闭包关闭变量,而不是值。这意味着所有委托都将获得对同一变量的引用,并且变量的值每次都会通过循环进行更改。 这应该可以修复它:
|
![]() |
5
1
在第一种情况下,DMSID在for循环的范围内声明,每个委托捕获它自己的该变量的“实例”。 在第二个版本中,将为foreach循环的整个范围声明dmsid。每个委托捕获同一个变量——这意味着您正在从多个线程访问同一个变量,而没有锁定——可能会发生坏事情。 |
|
Robert King · Unity C#语法问题-转换位置 1 年前 |
![]() |
JBryanB · 如何从基本抽象类访问类属性 1 年前 |
|
law · 检查答案按钮的输入字符串格式不正确 2 年前 |
![]() |
i_sniff_ket · 在unity之外使用unity类 2 年前 |