簡體   English   中英

使用 Visual Studio 2008 的 2.0 中的 C# .NET 3.0/3.5 功能

[英]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 的新功能? 另外,還有哪些功能不可用?

可用的

  • 拉姆達
  • 擴展方法(通過聲明一個空的 System.Runtime.CompilerServices.ExtensionAttribute)
  • 自動屬性
  • 對象初始值設定項
  • 集合初始化器
  • LINQ to Objects(通過實現 IEnumerable 擴展方法,請參閱LinqBridge

無法使用

  • 表達式樹
  • WPF/Silverlight 庫

您可以使用由編譯器通過發出 2.0 兼容的 IL 處理的任何新的 C# 3.0 功能,並且不引用任何新的 3.5 程序集:

  • Lambdas(用作Func<..> ,而不是Expression<Func<..>>
  • 擴展方法(通過聲明一個空的System.Runtime.CompilerServices.ExtensionAttribute
  • 自動屬性
  • 對象初始值設定項
  • 集合初始化器
  • LINQ to Objects(通過實現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”實現。 您可能希望在FuncAction委托系列中聲明委托,以便更輕松地使用 lambda 表達式 - 然后如果/當您移動到 ​​.NET 3.5 時將其刪除

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

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

之前有一個關於類似內容的討論,您可能也想閱讀:

面向 .NET Framework 3.5,使用 .NET 2.0 運行時。 注意事項?

您可以使用完全支持 LINQ 和表達式樹的 Mono 版本的 System.Core。 我針對 .net 2.0 編譯了它的源代碼,現在我可以在我的 .net2.0 項目中使用它。 這對於需要在 .net3.5 不可用的 win2k 上部署的項目非常有用。

Lambda 和擴展方法完全由編譯器處理,可以與 .Net 2.0 框架一起使用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM