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中文网其他相关文章!