![](/img/trans.png)
[英]What is new in Visual Studio 2008 vs 2005 or C# 3.0 vs C# 2.0?
[英]C# .NET 3.0/3.5 features in 2.0 using Visual Studio 2008
升級到 Visual Studio 2008 后,可以在 .NET 2.0 中使用哪些特定於 C# 3.0/3.5 的新功能? 另外,還有哪些功能不可用?
可用的
無法使用
您可以使用由編譯器通過發出 2.0 兼容的 IL 處理的任何新的 C# 3.0 功能,並且不引用任何新的 3.5 程序集:
Func<..>
,而不是Expression<Func<..>>
)System.Runtime.CompilerServices.ExtensionAttribute
)IEnumerable<T>
擴展方法,請參閱LinqBridge )幾乎所有的東西! Daniel Moth 在這里和這里介紹了這一點。 只剩下運行時支持:LINQ-to-Objects 由LINQBridge提供 - 只剩下更大的 API,如表達式支持,以及 LINQ-to-SQL 等工具。 這些太大了,無法合理地移植回 .NET 2.0,所以我會使用 .NET 3.5 來實現這些。
面向 .NET 2.0 時,幾乎所有 C# 3.0 功能都可用。 對於擴展方法,您需要定義一個額外的屬性。 表達式樹根本不可用。 查詢表達式支持基於后跟“正常”C# 規則的翻譯,因此您需要提供 Select、Where 等方法。 LINQBridge是事實上的標准“LINQ to Objects in .NET 2.0”實現。 您可能希望在Func
和Action
委托系列中聲明委托,以便更輕松地使用 lambda 表達式 - 然后如果/當您移動到 .NET 3.5 時將其刪除
要定義擴展方法,如果您的目標是 .NET 2.0,則需要提供以下類:
namespace System.Runtime.CompilerServices {
[AttributeUsage(AttributeTargets.Method | AttributeTargets.Class | AttributeTargets.Assembly)]
sealed class ExtensionAttribute : Attribute { }
}
之前有一個關於類似內容的討論,您可能也想閱讀:
您可以使用完全支持 LINQ 和表達式樹的 Mono 版本的 System.Core。 我針對 .net 2.0 編譯了它的源代碼,現在我可以在我的 .net2.0 項目中使用它。 這對於需要在 .net3.5 不可用的 win2k 上部署的項目非常有用。
Lambda 和擴展方法完全由編譯器處理,可以與 .Net 2.0 框架一起使用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.