首页 > 后端开发 > C++ > C#foreach循环变量重复使用会导致'访问修改后的关闭”问题?

C#foreach循环变量重复使用会导致'访问修改后的关闭”问题?

Linda Hamilton
发布: 2025-01-31 21:16:10
原创
635 人浏览过

Why Does C# Foreach Loop Variable Reuse Cause

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>。 每次迭代都会收到一个新副本。 这解决了“修改后的闭合”问题,使较旧的方法不安全。 它还突出了仔细的

关键字用法的重要性,尤其是使用lambdas或nonymous方法。

以上是C#foreach循环变量重复使用会导致'访问修改后的关闭”问题?的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板