假设我想向某人演示C#4.0和5.0中的foreach之间的区别。

所以我写了我的代码片段:

public static void Main()
{
    string[] fruits = { "Apple", "Banana", "Cantelope" };
    var actions = new List<Action>();
    foreach (var fruit in fruits)
    {
        actions.Add(() => Console.WriteLine(fruit));
    }

    foreach(var a in actions)
    {
        a();
    }
}

但是无论我如何编译,它始终像在5.0 *中那样工作。我尝试在csproj文件中设置语言版本(“构建”->“高级”->“语言版本”),并尝试仅在命令行上构建它:
csc myProgram.cs /langversion:4

我无法使其以“旧的”方式工作。有什么帮助吗?如果您能告诉我如何在命令行和Visual Studio上执行此操作,则可以加分。

*对于不认识的人,请使用C#。 Cantelope Cantelope Cantelope,而在C#5.0+中,它将(更直观地)打印Apple Banana CantelopeHere's a linkhere's another

最佳答案

/langversion的目的仅是使编译器接受特定的语言构造。它不会影响编译器的实际行为。

documentation指出:







因此,为了演示不同的行为,您将必须使用安装了正确框架版本的其他csc.exe。

C:\Windows\Microsoft.NET\Framework\v3.5>csc /out:c:\temp\foo-35.exe c:\temp\foo.cs
Microsoft (R) Visual C# 2008 Compiler version 3.5.30729.7903
for Microsoft (R) .NET Framework version 3.5
Copyright (C) Microsoft Corporation. All rights reserved.


C:\Windows\Microsoft.NET\Framework\v3.5>c:\temp\foo-35.exe
Cantelope
Cantelope
Cantelope

10-08 19:59