gpt4 book ai didi

c# - 重现捕获迭代变量问题

转载 作者:行者123 更新时间:2023-11-30 19:57:43 25 4
gpt4 key购买 nike

我正在 Nutshell 中重读 c# 5.0 中关于捕获迭代变量的部分(第 138 页),我试图在 c# 4.0 和 c# 5.0 上重现下面的代码,但直到现在才希望能够发现差异

using System;
class Test
{
static void Main()
{
Action[] actions = new Action[3];
int i = 0;
foreach (char c in "abc")
actions[i++] = () => Console.Write(c);
for (int j = 0; j < 3; j++)
{
actions[j]();
}
foreach (Action a in actions) a();
Console.ReadLine();
}
}

注意我安装了 Visual Studio 2012(安装了 .net 4.0 和 4.5)并且在尝试重现问题时更改了目标框架

更新进一步解释 C# 4.0 的输出将不同于 C# 5.0 的问题
我知道由于更新到最新版本的 C# 编译器,这可能不太有用

谁能告诉我如何重现这个问题?

最佳答案

您无法重现它,因为您更改的是 .Net 框架的版本,而不是编译器。您一直在使用 C# v5.0,它修复了 foreach 循环的问题。不过,您可以看到 for 循环的问题:

Action[] actions = new Action[3];
int i = 0;

for (int j = 0; j < "abc".Length; j++)
actions[i++] = () => Console.Write("abc"[j]);
for (int j = 0; j < 3; j++)
{
actions[j]();
}
foreach (Action a in actions) a();
Console.ReadLine();

要使用旧的编译器,您需要一个旧的 VS 版本。在这种情况下,要看到您的代码因 foreach 而中断,您需要在 VS 2010 中对其进行测试(我在本地进行了测试)。


您可能想尝试更改编译器的语言版本(如 xanatos 在评论中所建议的那样),但这不使用旧的编译器。它使用相同的编译器,但限制您使用特定功能:

Because each version of the C# compiler contains extensions to the language specification, /langversion does not give you the equivalent functionality of an earlier version of the compiler.

来自 /langversion (C# Compiler Options)

关于c# - 重现捕获迭代变量问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28961765/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com