首页 >后端开发 >C++ >为什么 C# 5.0 的捕获闭包修复不适用于 For 循环?

为什么 C# 5.0 的捕获闭包修复不适用于 For 循环?

Patricia Arquette
Patricia Arquette原创
2025-01-07 19:16:43329浏览

Why Doesn't C# 5.0's Captured Closure Fix Apply to For Loops?

C# 5.0 中的闭包捕获(循环变量)

问题:

在 C# 5.0 中,foreach 循环中捕获闭包的问题已得到解决,确保捕获循环变量的正确值。但是,for 循环中仍然存在相同的问题。为什么这个问题没有同时针对这两种类型的循环进行解决?

解答:

for 循环中现有的行为在逻辑上是合理的。虽然 foreach 循环类似于为每次迭代声明一个新变量,但 for 循环具有独特的结构,包括初始化器、条件、迭代器和主体。

for 循环中的初始化器只执行一次,因此只进行一次“变量实例化”是合乎逻辑的。此外,对于每次循环迭代,并没有关于变量“初始”值的固有假设。

考虑以下示例:

<code class="language-C#">for (int i = 0, j = 10; i < 5; i++, j--) {
    Action action = () => Console.WriteLine(i, j);
    action();
}</code>

在这种情况下,如果针对 for 循环解决这个问题,将很难确定其行为。

以上是为什么 C# 5.0 的捕获闭包修复不适用于 For 循环?的详细内容。更多信息请关注PHP中文网其他相关文章!

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