如何用特定语言版本编译C#

Pha*_*lon 26 c# csc

假设我想向某人演示有关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();
    }   
}
Run Code Online (Sandbox Code Playgroud)

但无论我如何编译它,它总是像5.0 *一样工作.我已经尝试在csproj文件中设置语言版本(Build - > Advanced - > Language Version),我尝试在命令行上构建它:

csc myProgram.cs /langversion:4
Run Code Online (Sandbox Code Playgroud)

我不能让它以"旧"的方式工作.有帮助吗?如果您可以告诉我如何在命令行和Visual Studio上执行此操作,可以获得奖励积分.

*对于任何不知道的人,在C#中.<= 4.0这将打印Cantelope Cantelope Cantelope,而在C#5.0+中它将(更直观地)打印Apple Banana Cantelope.这是一个链接,这是另一个.

And*_*bel 30

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

文件指出:

使编译器仅接受所选C#语言规范中包含的语法.

由于C#编译器的每个版本都包含语言规范的扩展,因此/ langversion不会为您提供早期版本编译器的等效功能.

因此,为了演示不同的行为,您必须使用与正确的框架版本一起安装的不同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
Run Code Online (Sandbox Code Playgroud)