首页 >后端开发 >C++ >为什么 C# 5.0 捕获的闭包改进没有应用于'for”循环?

为什么 C# 5.0 捕获的闭包改进没有应用于'for”循环?

Linda Hamilton
Linda Hamilton原创
2025-01-07 19:26:41152浏览

Why weren't C# 5.0's captured closure improvements applied to `for` loops?

C# 5.0:为什么 for 循环错过了捕获的闭包增强

C# 5.0 解决了 foreach 循环中捕获循环变量的问题,确保闭包变量准确反映捕获时循环变量的值。 但是,此改进并未应用于 for 循环,它保留了 5.0 之前的行为。

遗漏原因

这种有意的排除源于 forforeach 循环之间的根本差异:

  • for 循环:以初始化为中心。 for 循环以初始化程序开始,为循环变量分配一个值。该变量是循环逻辑的核心,需要反复修改和检查。
  • foreach 循环:基于迭代器。 foreach 循环依赖于为每次迭代提供值的迭代器。循环变量充当占位符,访问迭代器的值。

for 循环中,单个“循环变量实例化”的概念与其注重初始化的性质相一致。 有一个逻辑上一致的循环变量实例,已初始化、更新并控制循环终止。

考虑这个for循环:

<code class="language-csharp">for (int i = 0; i < 10; i++) { ... }</code>

这里,i 管理迭代计数。它被初始化为 0,每次迭代递增,并控制循环终止。 捕获 i 的闭包将直观地引用单个值,而不管 i 的循环内更改如何。这与 for 循环对变量变化状态的依赖相矛盾。

相反,foreach循环不依赖于循环变量的状态。它们迭代集合而不需要特定的变量实例。 因此,闭包在捕获时捕获迭代器的值,与后续修改隔离。

以上是为什么 C# 5.0 捕获的闭包改进没有应用于'for”循环?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn