2009-09-10 106 views

回答

4

請看這裏:

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

5

我有一個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