c#foreach
循环变量重复使用:问题和解决方案
> c#lambda表达式和匿名方法在foreach
>循环中引入了“修改后的闭合”问题。 考虑此示例:
foreach (var s in strings) { query = query.Where(i => i.Prop == s); // Modified closure issue ... }
编译器的生成代码揭示了问题的根源:
>string s; while (enumerator.MoveNext()) { s = enumerator.Current; ... }
s
变量被声明外部
>为什么?
>
for
这个变量重复使用是早期C#(1.0)中的设计选择。 内部变量和外部变量之间的差异被认为微不足道。但是,C#2.0的封闭语义改变了这一点。 与
在C#5和更高版本中的更改 >识别缺陷,C#5引入了一个破坏的变化:
循环变量现在是逻辑上的>内部的foreach
>。 每次迭代都会收到一个新副本。
这解决了“修改后的闭合”问题,使较旧的方法不安全。 它还突出了仔细的
以上是C#foreach循环变量重复使用会导致'访问修改后的关闭”问题?的详细内容。更多信息请关注PHP中文网其他相关文章!