2008-10-06 35 views
13

Một số tính năng mới có thể được sử dụng trong .NET 2.0 dành riêng cho C# 3.0/3.5 sau khi nâng cấp lên Visual Studio 2008 là gì? Ngoài ra, một số tính năng không có sẵn là gì?Tính năng C# .NET 3.0/3.5 trong phiên bản 2.0 sử dụng Visual Studio 2008

  • Lambdas
  • phương pháp mở rộng có sẵn (bằng cách tuyên bố một System.Runtime.CompilerServices.ExtensionAttribute trống)
  • tính tự động
  • Object initializers
  • Collection Initializers
  • LINQ to Objects (bằng cách triển khai IE phương pháp khuyến nông có thể điếm, xem LinqBridge)

Không Khả

  • cây biểu
  • WPF/Silverlight Libraries
+0

Cây biểu thức có sẵn thông qua việc sử dụng Mono. Xem câu trả lời của tôi dưới đây. –

Trả lời

16

Bạn có thể sử dụng bất kỳ tính năng C# 3.0 mới được xử lý bởi trình biên dịch bằng cách phát ra 2.0 tương thích IL và không tham khảo bất kỳ 3.5 lắp ráp mới:

  • Lambdas (sử dụng như Func<..>, không Expression<Func<..>>)
  • phương pháp mở rộng (bằng cách tuyên bố một sản phẩm nào System.Runtime.Com pilerServices.ExtensionAttribute)
  • tính tự động
  • Object Initializers
  • Collection Initializers
  • LINQ to Objects (bằng cách thực hiện <T> phương pháp khuyến nông IEnumerable, xem LinqBridge)
1

Lambdas & phương pháp mở rộng được xử lý hoàn toàn bởi trình biên dịch và có thể được sử dụng với khuôn khổ .Net 2.0.

+1

Lambdas là đại biểu, vâng. Nhưng lambdas như Expressions dựa trên lớp Expression (es) từ .NET 3.5. –

3

Để xác định phương pháp khuyến nông, bạn sẽ cần phải cung cấp các lớp sau đây nếu bạn đang nhắm mục tiêu NET 2.0:

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

Tôi cũng phải làm điều này (tìm thấy bạn đề xuất điều này trên một trang web khác) để có thể sử dụng Ninject 1.0 cho 2.0 trong một dự án 3.5 SP1. Rất lạ ... –

5

Khá nhiều thứ! Daniel Moth bao gồm herehere này. Điều đó chỉ để lại hỗ trợ thời gian chạy: LINQ-to-Objects được cung cấp bởi LINQBridge - chỉ để các API lớn hơn như hỗ trợ Expression và các công cụ như LINQ-to-SQL. Đây là quá lớn để được hợp lý chuyển trở lại .NET 2.0, vì vậy tôi muốn sử dụng NET 3.5.

5

Tôi đề cập đến điều này trong một số article on my site.

Hầu như tất cả các tính năng C# 3.0 đều khả dụng khi nhắm mục tiêu .NET 2.0. Đối với các phương thức mở rộng, bạn cần xác định thuộc tính bổ sung. Cây biểu thức không có sẵn. Hỗ trợ biểu thức truy vấn dựa trên một bản dịch theo sau là các quy tắc C# "bình thường", vì vậy bạn sẽ cần một cái gì đó để cung cấp các phương thức Select, Where etc. LINQBridge là thực tế tiêu chuẩn "LINQ to Objects in .NET 2.0". Bạn cũng có thể muốn khai báo các đại biểu trong các gia đình đại diện FuncAction ủy quyền để làm việc dễ dàng hơn với các biểu thức lambda - và sau đó xóa chúng nếu/khi bạn di chuyển đến .NET 3.5

2

Bạn có thể sử dụng phiên bản Hệ thống của Mono .Core hỗ trợ đầy đủ LINQ & Cây biểu thức. Tôi đã biên dịch mã nguồn của nó dựa trên .net 2.0 và bây giờ tôi có thể sử dụng nó trong các dự án .net2.0 của tôi. Điều này là rất tốt cho các dự án cần được triển khai trên win2k, trong đó .net3.5 không khả dụng.

+0

các cây biểu thức này có yêu cầu .Net 2.0 SP1 không? – Lucas

+0

không. NET cũ 2.0. Hoạt động tốt ngay cả trên máy win2k. –

Các vấn đề liên quan