2008-10-06 62 views
13

升級到Visual Studio 2008後,.NET 2.0中可用於特定於C#3.0/3.5的新功能有哪些?此外,有哪些功能不可用?使用Visual Studio 2008的2.0版C#.NET 3.0/3.5功能

推介

  • lambda表達式
  • 擴展方法(通過聲明一個空System.Runtime.CompilerServices.ExtensionAttribute)
  • 自動性質
  • 對象初始
  • 集合初始化
  • LINQ到對象(通過實現IE可數擴展方法,請參閱LinqBridge

不可

  • 表達式樹
  • WPF/Silverlight庫
+0

通過使用Mono可以使用表達式樹。請參閱下面的答案。 – 2010-01-27 07:08:52

回答

16

您可以使用由編譯器通過發射處理任何新的C#3.0的功能2.0兼容的IL和不引用任何新的3.5組件:

  • lambda表達式(用作Func<..>,不Expression<Func<..>>
  • 擴展方法(通過聲明一個空System.Runtime.Com pilerServices.ExtensionAttribute)
  • 自動屬性
  • 對象初始化
  • 集合初始化
  • LINQ到對象(通過實現IEnumerable的<牛逼>擴展方法,請參閱LinqBridge
1

Lambda表達式&擴展方法是由編譯器純粹的處理,並能與.Net 2.0框架一起使用。

+1

蘭巴達斯作爲代表,是的。但lambda表達式依賴於.NET 3.5中的Expression類。 – 2008-10-06 11:40:31

3

要定義擴展方法,你需要提供以下類,如果你的目標.NET 2.0:

namespace System.Runtime.CompilerServices { 
    [AttributeUsage(AttributeTargets.Method | AttributeTargets.Class | AttributeTargets.Assembly)] 
    sealed class ExtensionAttribute : Attribute { } 
} 
+0

我也必須這樣做(發現你在另一個網站上提出這個建議)才能在3.5 SP1項目中使用Ninject 1.0 for 2.0。非常奇怪... – 2009-01-21 12:31:24

5

幾乎所有的東西! Daniel Moth涵蓋了這個herehere。這隻剩下運行時支持:LINQ到對象由LINQBridge提供 - 這隻剩下更大的API,比如表達式支持,以及像LINQ到SQL這樣的工具。這些太大而無法合理地移植到.NET 2.0中,所以我會使用.NET 3.5。

5

我在article on my site中對此進行了說明。

幾乎所有C#3.0功能都可用於定位.NET 2.0。對於擴展方法,您需要定義一個額外的屬性。表達式樹根本不可用。查詢表達式支持基於一個翻譯後面跟着「正常」的C#規則,所以你需要一些東西來提供Select,Where等方法。 LINQBridge是事實上的標準「LINQ to .NET 2.0中的對象」實現。您可能想要聲明FuncAction代表系列中的代表,以便更輕鬆地使用lambda表達式 - 然後在移至.NET 3.5時將其刪除/移除到.NET 3.5

2

您可以使用Mono的系統版本.Core完全支持LINQ &表達式樹。 我將它的源代碼編譯爲.net 2.0,現在我可以在我的.net2.0項目中使用它。 這對於需要在win2k上部署的項目很有用,其中.net3.5不可用。

+0

做這些表達樹需要.Net 2.0 SP1? – Lucas 2009-05-19 16:18:58

相關問題