.NET2.0上的C#3.0兼容性

.NET2.0上的C#3.0兼容性,c#,.net-3.5,.net-2.0,compatibility,C#,.net 3.5,.net 2.0,Compatibility,在面向.NET2.0框架的应用程序中,我们可以使用哪些C#3.0语言功能 PS:我知道的Lambda表达式和varkeyword我有一个 简言之: 支持: 自动实现的属性、隐式类型的局部变量和数组、对象和集合初始值设定项、匿名类型、分部方法、转换为委托类型的lambda表达式 部分支持: 扩展方法(需要属性)和查询表达式(需要像LINQBridge这样的东西才有用) 不支持: lambda转换为表达式树 事实上,我听说在Mono的System.Core实现的帮助下,可以转换为表达式树

在面向.NET2.0框架的应用程序中,我们可以使用哪些C#3.0语言功能

PS:我知道的Lambda表达式和
var
keyword

我有一个

简言之:

支持:

  • 自动实现的属性、隐式类型的局部变量和数组、对象和集合初始值设定项、匿名类型、分部方法、转换为委托类型的lambda表达式
部分支持:

  • 扩展方法(需要属性)和查询表达式(需要像LINQBridge这样的东西才有用)
不支持:

  • lambda转换为表达式树
事实上,我听说在Mono的
System.Core
实现的帮助下,可以转换为表达式树。我还没试过呢。。。我一直想这样做(然后更新页面)。

请参见此处:

详细介绍了针对.NET2.0框架和使用C#3.0时可以做什么和不能做什么

总之:

  • 不能使用新的3.5程序集(System.Data.Linq、System.Xml.Linq、System.Core)
  • 您不能使用或(但是,请参阅下面的方法,了解同时使用Linq/查询语法和扩展方法的方法!)
  • 您可以使用、、&
扩展方法在某种程度上可以工作,但是,它们需要“System.Runtime.CompilerServices.ExtensionAttribute”才能工作,这种类型可以在System.Core DLL中找到(严格来说,它不是.NET 2.0框架的一部分)


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

乔恩抢在我前面。在一个奇怪的命运转折中,我链接到的博客帖子上的第一条评论来自Jon Skeet(!),第二条是“你不能”——你可以使用查询语法——只是它们不存在,除非你使用类似LINQBridge的东西。@Marc——你是对的。谢谢你指出这一点。我编辑了我的答案来反映这个事实。事实非常有趣。。。我会接受你的回答,因为Jon名声很好:PYes,我怀疑表达式树的东西会很好用,只要有一个合适的表达式类。当然,该类的确切需求没有在规范中记录,如果出现任何错误,编译器将以一种非常混乱的方式爆炸(比您预期的要丑陋得多)。我只是尝试了其中的一小部分()就很有意思了——mono选项对于完整版本来说更有意义。