可以编译C#5.0的哪些功能以在.net 4.0上运行

时间:2012-03-20 15:26:54

标签: c# c#-5.0

我希望框架级别更新(例如async)无法编译为在较低的框架上工作,但编译器差异(例如foreach循环变量范围)在使用C#5.0编译时可以正常工作。净4.0? 任何人都可以提供明确的清单吗?

编辑:

不是要求一个明确的列表,我将其作为很多要求回过头来,任何人都能够回答编译器级别更改(如foreach变量作用域)在使用C#5.0时的行为方式不同早期的框架版本。

2 个答案:

答案 0 :(得分:4)

所有这些。没有什么需要新的运行时支持 - 有些功能只需要新的库。但是,没有要求您针对.NET 4.5库进行编译 - 您也可以提供自己的相同API实现。

例如,将以下文件添加到项目中以在.NET 4.0项目中启用对async / await的支持:https://gist.github.com/1961087

我还没有尝试使用调用者信息属性,但是我很确定即使您自己定义它们而不是使用.NET 4.5附带的那些属性,它们也能正常工作。

同样的技巧与C#3中的class ExtensionAttribute一起使用.NET 2.0的扩展方法,你甚至可以在.NET 2.0中使用完整的LINQ-to-Objects(LinqBridge

答案 1 :(得分:3)

就功能而言,任何适用于4.0的语法都可以在4.0中编译,即使您最初在5.0中生成它也是如此。如果您在项目属性中更改.NET Framework版本,Visual Studio 11将通知您在4.0中无法运行的代码,因此这将是我的指南。如果编译为4.0是个问题,请使用VS 11进行编辑,但将框架兼容性保留为4.5。

可能有一些较新的FUD将编译为旧版本。以前的版本都是如此,但是使用新语法并尝试向后编译它是命中还是错过。

我不知道一个明确的语言功能列表(关键字等),并且没有找到一个搜索。我还没有在野外看到4.5语言规范。