1
24
编译器正在做的是将lambda和lambda捕获的所有变量拉入编译器生成的嵌套类中。 编译之后,您的示例看起来很像这样:
通过在for循环中进行复制,编译器在每次迭代中生成新对象,如下所示:
|
2
10
我唯一能找到的解决方案是先制作本地副本:
但是我很难理解为什么在for循环中放置一个副本与使用lambda捕获有什么不同
|
3
9
唯一的解决方案是在lambda中进行本地复制和引用。当在闭包中访问时,C(和vb.net)中的所有变量都将具有引用语义,而不是复制/值语义。这两种语言都无法改变这种行为。 注意:它实际上并不编译为引用。编译器将变量提升到一个闭包类中,并将对“i”的访问重定向到给定闭包类中的字段“i”。不过,通常更容易将其视为引用语义。 |
4
2
记住lambda表达式实际上只是匿名方法的语法甜头。 也就是说,您真正要寻找的是匿名方法如何在父范围中使用局部变量。 这里有一个描述这个的链接。 http://www.codeproject.com/KB/cs/InsideAnonymousMethods.aspx#4 |
Sergei · 删除数据框中多个列的列表中的某些元素 2 年前 |