.Net 2.0上的C#3.0兼容性

问题描述:

什么是C#3.0我们可以在面向.Net 2.0框架的应用程序中使用哪些语言功能?.Net 2.0上的C#3.0兼容性

PS:我知道一些像Lambda表达式和var关键字

请看这里:

Using C# 3.0 (.Net 3.5) syntax in a .Net 2.0 application

对于一个完整的运行,你可以针对.NET 2.0框架和使用C#3.0的时候,不能做什么了。

总结:

扩展方法排序的工作,但是,他们需要“System.Runtime.CompilerServices.ExtensionAttribute”为了工作,这类型的System.Core程序DLL中发现(这是不是严格一部分.NET 2.0框架)。

查询语法不能用于开箱即用,但是,如果使用第三方DLL(如LINQBridge),则可以使用查询语法。这个DLL有效地重新实现了许多你需要在面向.NET 2.0框架时执行LINQ的“缺失”类型。它还实现了Extension方法工作所需的“ExtensionAttribute”类型,所以只需从项目中添加/引用LINQBridge DLL就可以启用LINQ,查询语法/表达式和扩展方法!

+0

乔恩击败了我。在命运的一个奇怪的转折中,我已经链接到的博客文章的第一条评论是来自Jon Skeet(!) – CraigTP 2009-09-10 10:48:49

+1

重复第二个“你不能” - 你可以使用查询语法 - 只是他们不是“除非你使用LINQBridge之类的东西。 – 2009-09-10 10:52:50

+0

@Marc - 你是对的。感谢您指出了这一点。我编辑了我的答案以反映这一事实。 – CraigTP 2009-09-10 11:09:25

我有一个article on this very topic

简言之:

支持:

  • 自动实现的属性,隐式类型的局部变量和数组,对象和集合初始化,匿名类型,部分的方法,转化成委托类型lambda表达式。

部分支持:

  • 扩展方法(需要一个属性)和查询表达式(需要像LINQBridge是有用的)

不支持:

  • Lambda表达式转换成表达树

实际上,我听说转换成表达式树可以借助Mono的System.Core实现。尽管我还没有尝试过......我保持这样做的意义(然后更新页面)。

+1

是的,我怀疑只要有合适的Expression类,表达式树的东西就可以正常工作。当然,这个类的确切需求没有在规范中记录,如果* anything *错了,编译器会以非常混乱的方式爆发(比你期望的要糟糕得多)。我尝试了一小部分乐趣很有趣(http://marcgravell.blogspot.com/2009/04/re-implementing-expression-for-compact.html) - 单声道选项对于完整版本更有意义。 – 2009-09-10 10:51:34

+0

+1,感谢乔恩和马克:) – 2009-09-10 12:04:50