2012-10-01 106 views
0

我的問題是similar to this但我想知道如果我可以在舊版本的.NET中使用不同版本的C#。在我的腦海中,它必須是可能的,因爲例如,Lambda與框架無關,它是一個C#(和VB,但我只在這裏討論C#)。語言版本和.net版本

問題是,我不能測試這隻有VS 2005在工作,我的家用電腦已經壞了。

因此,在VS 2010/2012中創建.NET 2.0項目時,我可以使用lambda的/ Linq等嗎?

回答

1

如果您將目標框架設置爲2.0並使用Visual Studio 2010,則可以使用Lambda表達式。但你不能使用LINQ在箱子外面,構架起以.Net 3.5推出

你應該看到的文章:Untangling the Versions by Jon Skeet

+1

毯子「你不能使用LINQ」有點強大,IMO。你不能使用LINQ開箱即用,但你可以使用LINQ的* some *方面進行一些工作。 –

+0

@JonSkeet,謝謝,我的意思是開箱即用。我沒有使用LINQBridge。我修改了我的答案以反映您的評論 – Habib

0

的語言版本和框架的版本實際上是綁在一起,和Visual Studio還將根據項目設置確定哪些功能可用。

對於.NET 2.0項目,您將無法使用LINQ,因爲這將綁定到C#2.0而不是C#3.0(這是在引入LINQ時的情況,以及擴展方法的情況)。

請注意,3.0和3.5框架使用2.0 運行時間

4

因此,在VS 2010/2012中創建.NET 2.0項目時,我可以使用lamda的/ Linq等嗎?

我有一個page for exactly this sort of thing。有些功能是特定於框架(或CLR特定的),有些則不是。

例如,您可以使用lambda表達式,匿名類型和.NET 2.0自動實現的屬性,而不會出現任何問題。

如果您提供替代實現(如LINQBridge),則可以使用LINQ to Objects。其他LINQ提供者(LINQ to SQL等)顯然可能使用Mono的庫,但個人而言,如果可能的話,我寧願升級到更高版本的框架。

您將無法使用C#4中的動態類型,因爲它需要僅存在於.NET 4中的類型,並且我認爲這些類型不易以兼容的方式回溯。 (它可能是可能的,因爲有至少的DLR的.NET 3.5的版本,但無論是播放很好地與C#4的編譯器則另當別論。)

+0

哈 - 我的最後幾個問題是基於您的單例模式的例子 - 我想我應該真的購買這本書,因爲它似乎涵蓋了我嘗試的很多地方瞭解。 :) – Dave

+0

編譯器允許我創建一個動態類型,但不能以任何方式使用它! * var sb = new StringBuilder();動態dsb = sb; *編譯沒有錯誤,但我無法訪問任何dsb方法!我想這是(根據您的意見),我需要.NET 4.0 – Dave

+0

@DaveRook:是的,我懷疑是這樣 - 我真的很驚訝,它甚至可以做到這一點。 –

0

有語言和編譯器,還有CLR。您可以在CLR 2.0上運行.NET 2.0,3.0和3.5。您不能在CLR 2.0上使用.NET 4功能。

因此,您可以將項目設置爲.NET 3.5,在具有.NET 3.5的計算機上編譯它,並在具有.NET 2.0的計算機上運行它。

+0

雖然您希望將其定位到2.0,以避免使用2.0中不存在的類型或成員。 –