有人能用简单的术语解释C#中的“访问修改后的闭包”吗?
可能重复:
什么是’关闭’?
访问修改后的关闭
获得修改后的封闭(2)
Resharper抱怨下面这段代码:
foreach (string data in _dataList) DoStuff (() => field);
什么是关闭? 我为什么要关心?
我已经读过关于数学和函数式编程的闭包,我在这里不知所措。 我的大脑太沉重了。
简单来说,这里发生了什么?
这是一个相当不错的解释。
当您从委托引用方法体中的变量时,将创建一个闭包。 实质上,生成包含对局部变量的引用的类。
如果不断修改变量,当外部方法调用委托时,它可能包含不可预测的值,甚至抛出exception。 例如,在这样的示例中:
foreach (string data in _dataList) { DoStuff (() => data); }
方法() => data
始终是相同的方法。 如果你存储它,你不知道最终调用它会发生什么 – 当时data
的价值是多少? 它甚至会有效吗? 如果使用yield return
这尤其危险。
没有迭代器的更简单的例子是:
var x = 5; Action f = () => Console.WriteLine(x); x = 76; f();
- entity framework:在关联中使用非主要唯一键的替代解决方案
- 如何使用itextsharp在PdfContentByte矩形中添加文本?
- Xamarin NSNotificatioCenter:我怎样才能通过NSObject?
- 如何将数组(通过引用,在VB6中)传递给C \ C ++ * .dll子例程?
- C#.NET的区间数据类型?
- 在回收价值类型统一是否有一点
- HttpListener与JWT和Basic auth:如何发送WWW-Authenticate? (自托管)
- System.Threading.ThreadPool.SetMaxThreads的默认值
- 为什么Console.Readline()对它允许的文本长度有限制?