vb.net – 为什么在lambda表达式中使用迭代变量很不好
发布时间:2020-12-17 08:13:08 所属栏目:百科 来源:网络整理
导读:我只是写了一些快速的代码,注意到这个编译器错误 Using the iteration variable in a lambda expression may have unexpected results. Instead,create a local variable within the loop and assign it the value of the iteration variable. 我知道它的意
我只是写了一些快速的代码,注意到这个编译器错误
我知道它的意思,我可以很容易地解决它,不是一个大事。
考虑这个代码:
List<Action> actions = new List<Action>(); for (int i=0; i < 10; i++) { actions.Add(() => Console.WriteLine(i)); } foreach (Action action in actions) { action(); } 你希望这打印什么?明显的答案是0 … 9 – 但实际上它打印10,十次。这是因为只有一个变量被所有的代表捕获。这是一种意想不到的行为。 编辑:我刚刚看到你在谈论VB.NET而不是C#。我相信VB.NET有更复杂的规则,由于变量在迭代中保持它们的值。 This post by Jared Parsons给出了一些关于所涉及的困难的信息 – 虽然它回到2007年,所以实际行为可能已经改变了。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- 基于XML的新闻发布和展示系统
- 一个基于red5+flash的网络聊天室red5Chat
- ruby-on-rails – Rails不生成验证失败消息
- macos – NSOpenPanel / NSSavePanel在Swift 3中崩溃
- PostgreSQL Hot-Standby
- ruby-on-rails-4 – Capybara无法点击模态中的表单按钮,不同
- applycationContext.xml文件配置信息
- iphone – 你用什么工具来支持XCode?
- 创建一个无窗口,可缩放的文本区域,代表C#中真正的Winforms文
- [Swift通天遁地]七、数据与安全-(19)使用Swift实现原生的SH