为了账号安全,请及时绑定邮箱和手机立即绑定

访问修改后的闭包

访问修改后的闭包

心有法竹 2019-07-02 16:55:37
访问修改后的闭包string [] files = new string[2];files[0] = "ThinkFarAhead.Example.Settings.Configuration_Local.xml"; files[1] = "ThinkFarAhead.Example.Settings.Configuration_Global.xml"; //Resharper complains this is an "access to modified closure"for (int i = 0; i < files.Length; i++ ){     // Resharper disable AccessToModifiedClosure     if(Array.Exists(Assembly.GetExecutingAssembly().GetManifestResourceNames(),     delegate(string name) { return name.Equals(files[i]); }))          return Assembly.GetExecutingAssembly().GetManifestResourceStream(files[i]);     // ReSharper restore AccessToModifiedClosure}虽然ReSharper抱怨说这是“访问修改后的闭包”,但上面的内容似乎很好。有人能说明这件事吗?
查看完整描述

3 回答

?
哈士奇WWW

TA贡献1799条经验 获得超6个赞

在本例中,没关系,因为您实际上是在执行委托循环。

但是,如果您保存委托并稍后使用它,则会发现所有委托在尝试访问文件[i]时都会抛出异常-它们正在捕获变量 i而不是在创建委托时它的价值。

简而言之,作为一个电势陷阱,但在这种情况下它不会伤害你。

本页底部对于一个更复杂的例子,结果是违反直觉的。


查看完整回答
反对 回复 2019-07-02
  • 3 回答
  • 0 关注
  • 539 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信