2009-02-27 26 views

Trả lời

13

lưu ý: Tôi trả lời câu hỏi này từ góc nhìn của khách hàng phối cảnh - tức là chuyển đổi /collectionType:<type> trên svcutil.exe (cũng có sẵn trong IDE).

Cá nhân, tôi có xu hướng giữ nó đơn giản và sử dụng List<T>. Nếu bạn định thực hiện rất nhiều ràng buộc dữ liệu, BindingList<T> có thể là một tùy chọn, nhưng đối với các thuộc tính đối tượng, nó thường là quá mức cần thiết. Mảng làm cho cuộc sống trở nên rất khó khăn ... tránh chúng ;-p

Lưu ý rằng với .NET 3.5 các tính năng có sẵn cho từng loại bộ sưu tập mờ, nhờ các phương pháp mở rộng trên Enumerable.

Thông thường, Collection<T> hữu ích khi bạn nghĩ bạn có thể muốn phân lớp bộ sưu tập để sử dụng các điểm mở rộng virtual. Đây không thực sự là một lựa chọn với WCF.

Như đã nêu, sử dụng IList<T> vv không phải là một tùy chọn trừ khi bạn đang sử dụng chia sẻ lắp ráp, vì lớp được tạo sẽ không thể tạo bộ sưu tập.

1

Bạn không thể sử dụng loại giao diện trong datacontract vì serializer sẽ không hoạt động với thuộc tính kiểu giao diện.

Bạn có thể sử dụng loại cụ thể, ví dụ: MyClass [] hoặc Danh sách

+0

Loại nào là tốt nhất để sử dụng khi nào? – JacobE

0

Ngoài thực tế là bạn không thể sử dụng các loại giao diện, việc bạn sử dụng loại bộ sưu tập nào cũng không quan trọng. Khách hàng của dịch vụ của bạn sẽ không bao giờ nhìn thấy chúng.

Hãy nhớ rằng các dịch vụ web cung cấp mô tảj dịch vụ cho khách hàng dưới dạng WSDL hoặc mex. Trong trường hợp của WSDL, máy khách sẽ nhận được một lược đồ XML mô tả các thông điệp được gửi và nhận. Trong trường hợp của một bộ sưu tập, khách hàng sẽ chỉ nhìn thấy một phần tử với một maxOccurs = "unbounded" thay vì một với maxOccurs = "1". Khách hàng có thể giải thích điều này dưới dạng mảng, danh sách hoặc bất kỳ thứ gì. Bất kể bạn thu thập bộ sưu tập nào từ dịch vụ của mình, khách hàng sẽ thấy maxOccurs = "không bị chặn" và diễn giải nó theo ý thích.

Ngoại lệ sẽ trả về một từ điển thuộc loại nào đó và tôi không biết cách hoạt động của từ điển đó.

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