有人能用简单的术语解释C#中的"访问修改后的闭包"吗?

Gol*_*lem 8 c# closures

可能重复:
什么是'关闭'?
访问修改后的闭包
访问修改后的闭包(2)

Resharper抱怨下面这段代码:

foreach (string data in _dataList)
    DoStuff (() => field);
Run Code Online (Sandbox Code Playgroud)

什么是关闭?我为什么要关心?

我已经读过关于数学和函数式编程的闭包,我在这里不知所措.我的大脑太沉重了.

简单来说,这里发生了什么?

Gre*_*Ros 9

是一个相当不错的解释.

从委托引用方法体中的变量时,将创建一个闭包.实质上,生成包含对局部变量的引用的类.
如果不断修改变量,当外部方法调用委托时,它可能包含不可预测的值,甚至抛出异常.例如,在这样的示例中:

foreach (string data in _dataList)
{
    DoStuff (() => data);
}
Run Code Online (Sandbox Code Playgroud)

该方法() => data总是采用相同的方法.如果你存储它,你不知道它最终被调用时会发生什么 - 当时的价值data是什么?它甚至会有效吗?如果您使用,这尤其危险yield return.

没有迭代器的更简单的例子是:

var x = 5;
Action f = () => Console.WriteLine(x);
x = 76;
f();
Run Code Online (Sandbox Code Playgroud)

  • 如果您提供的链接死亡,在您的答案中至少提供一些解释是有帮助的. (7认同)
  • 正在努力:) (2认同)