有人能解释一下吗;进入修改后的关闭窗口”;用C#简单来说?

有人能解释一下吗;进入修改后的关闭窗口”;用C#简单来说?,c#,closures,C#,Closures,可能重复: Resharper正在抱怨以下代码: foreach (string data in _dataList) DoStuff (() => field); 什么是结束?我为什么要在乎 我在数学和函数编程中读到过闭包,我在这里不知所措。对我的大脑来说太重了 简单地说,这里发生了什么?是一个相当好的解释 当从委托引用方法体中的变量时,将创建闭包。本质上,生成了一个包含对局部变量引用的类。 如果变量不断修改,当外部方法调用委托时,它可能包含不可预测的值,甚至引发异常。

可能重复:


Resharper正在抱怨以下代码:

foreach (string data in _dataList)
    DoStuff (() => field);
什么是结束?我为什么要在乎

我在数学和函数编程中读到过闭包,我在这里不知所措。对我的大脑来说太重了

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

是一个相当好的解释

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

foreach (string data in _dataList)
{
    DoStuff (() => data);
}
方法
()=>data
始终是相同的方法。如果存储它,您不知道最终调用它时会发生什么-
data
的值在当时是多少?它会有效吗?如果使用
收益率返回
,这尤其危险

一个没有迭代器的简单示例是:

var x = 5;
Action f = () => Console.WriteLine(x);
x = 76;
f();

可能重复的,或者,这些都无助于理解什么是结束…:(也许然后将你的问题的标题改写为“什么是结束?”这个如何:在这种情况下,这些将与你的问题重复:如果你提供的链接消失,在你的回答中至少提供一些解释是有帮助的。太好了!谢谢!现在更清楚了!