And*_*nov 6 c# c#-5.0 visual-studio-2013
C#5引入了重大更改到超过在循环变量工作的方式封foreach声明,即众所周知的(细节中可以找到这个文章埃里克利珀).我想在Visual Studio中看到破坏前的更改行为.为此我使用以下代码创建了一个小型控制台应用程序:
using System;
using System.Collections.Generic;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
var values = new List<int>() { 100, 110, 120 };
var funcs = new List<Func<int>>();
foreach (var v in values)
funcs.Add(() => v);
foreach (var f in funcs)
Console.WriteLine(f());
}
//this method does break compilation on C# versions that are older than C#5
public async void DoStuff()
{
}
}
}
Run Code Online (Sandbox Code Playgroud)
当使用C#5编译器编译时,显然会打印出来
110
120
130
Run Code Online (Sandbox Code Playgroud)
但是在我去之后Project|Properties|Build|Advanced,将编译器更改为C#3并评论了DoStuff它仍然打印相同数字的方法,而不是
130
130
130
Run Code Online (Sandbox Code Playgroud)
正如我所料.
之后,我调查了Main两个编译器生成的方法的IL代码,它们完全相同.
所以我的问题是:我可以在Visual Studio中选择的C#的不同语言版本实际上是编译器的最后一个版本,其中某些语言功能受到限制,如果是这样,这个决定的原因是什么?
| 归档时间: |
|
| 查看次数: |
85 次 |
| 最近记录: |