Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用特定语言版本编译C#_C#_Csc - Fatal编程技术网

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

如何使用特定语言版本编译C#,c#,csc,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(() => Consol

假设我想向某人演示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();
    }   
}
我不能让它以“旧”的方式工作。有什么帮助吗?如果您可以告诉我如何在命令行和VisualStudio上执行此操作,则可以获得额外的积分


*对于任何不知道的人,用C
/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

你怎么知道它不是以旧的方式编译的呢?它可能会帮助读者指出两个版本的不同之处。没有多少人知道在闭包中如何处理循环变量的变化。C#4有动作和Lambda表达式。你认为它应该做什么而不是做什么呢?对于更规范的来源:@pm100 VS2012附带了C#5.0,所以你只看到了我发布的内容。:)在VS2010中尝试同样的方法。
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