我正在阅读'Lambda表达式'主题(第17章;代表,C#代表语法糖)。 Jeffery声明C#编译器在后台创建了一个新的非静态类,它具有以下内容:
我有以下两个问题:
我自己做了一点调试,看到如果Lambda Expression修改了局部变量的值(在lambda Expresison正在使用的方法中定义),新值也会反映在表达式主体之外。考虑到表达式实际上是在另一个类中,这怎么可能呢?
为什么在静态类完全相同的情况下,发出的类需要是非静态的?
我希望这不是一个我无法理解的非常简单的概念。
如果我需要提供更多详细信息,请与我们联系。
答案 0 :(得分:5)
首先,我几天前有一个类似的问题。
Closure captured variable modifies the original as well
第二,使它成为静态类有什么意义?无论如何只创建了一个对象,并且该对象不必在整个应用程序生命周期中存活。
the new value is reflected outside the expression body too. How is this possible considering the expression is actually in a different class.
问题是anonymus方法引用了同一个对象,以及anonymus方法之外的局部变量,所以你改变它的地方并不重要,你改变了同样的事情。
此外,Tim Goodman在我链接的问题中提供的答案,通过在anonymus方法中创建一个新对象,向您展示如何做,以避免变化在任何地方反映出来。