可能重复:
什么是'关闭'?
访问修改后的闭包
访问修改后的闭包(2)
Resharper抱怨下面这段代码:
foreach (string data in _dataList)
DoStuff (() => field);
Run Code Online (Sandbox Code Playgroud)
什么是关闭?我为什么要关心?
我已经读过关于数学和函数式编程的闭包,我在这里不知所措.我的大脑太沉重了.
简单来说,这里发生了什么?
这是一个相当不错的解释.
从委托引用方法体中的变量时,将创建一个闭包.实质上,生成包含对局部变量的引用的类.
如果不断修改变量,当外部方法调用委托时,它可能包含不可预测的值,甚至抛出异常.例如,在这样的示例中:
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)
| 归档时间: |
|
| 查看次数: |
6774 次 |
| 最近记录: |