2012-08-07 4 views
14

Tôi vừa mới phát hiện ra rằng .NET Fx hiện nay có 3 giao diện hữu ích:Tại sao HashSet <T> không triển khai IReadOnlyCollection <T>?

  1. IReadOnlyCollection<T>
  2. IReadOnlyList<T>
  3. IReadOnlyDictionary<K,V>

Và tôi chút nhầm lẫn tại sao HashSet<T> không thực hiện IReadOnlyCollection<T> ? Có bất kỳ lý do gì, hoặc Microsoft chỉ quên về bộ lần nữa?

UPD

Sau hai giờ googling tôi đã tìm thấy rằng có rất nhiều bộ sưu tập trong BCL trong đó có .Count tài sản nhưng không thực hiện giao diện IReadOnlyCollection<T>.

UPD2

tôi đã tìm thấy bài này http://social.msdn.microsoft.com/Forums/en/netfxbcl/thread/b4fb991a-3f5c-4923-93d4-7cd5c004f859 và câu trả lời bằng cách Immo Landwerth nơi he've nói sau

bộ sưu tập khác Will ngoài Danh sách <> và từ điển <> được cập nhật để hỗ trợ các giao diện này?

Tuyệt đối. Trên thực tế, tất cả các loại bộ sưu tập được tích hợp sẵn của chúng tôi đã được triển khai IReadOnlyList <> và IReadOnlyDictionary <>. Điều này có nghĩa là, bạn có thể trực tiếp chuyển một phiên bản Danh sách, T [] hoặc Từ điển <> đến một API có phiên bản IReadOnly.

+0

Ok, vậy tại sao [Danh sách ] (http://msdn.microsoft.com/en-us/library/6sh2ey19 (v = vs.110)) có làm gì? – hazzik

+0

Lạ. Imho, một quyết định thiết kế không phù hợp. Xem http://www.infoq.com/news/2011/10/ReadOnly-WInRT/ –

+0

Ở đâu có khoảng ISet ? – hazzik

Trả lời

13

Trong phiên bản 4.5 của khung, HashSet<T> không triển khai IReadOnlyCollection<out T>.

Sự thiếu sót này đã được giải quyết trong phiên bản 4.6 của khuôn khổ (được phát hành gần 12 tháng sau khi câu hỏi trên được hỏi).

Các chỉnh sửa này là not limited to HashSet<T>, các bộ sưu tập khác như Stack<T>Queue<T> đã nhận được các cải tiến này.

Suy đoán về lý do cho bất kỳ thiếu sót nào là tranh luận. Nó có thể là giám sát hoặc áp lực thời gian nhưng thẳng thắn, nó là hậu quả rất ít. Tôi nghi ngờ rằng ngay cả đầu vào trực tiếp từ nhóm phát triển của Microsoft sẽ có phần chủ quan, ngay cả khi chúng ta thích những giai thoại liên quan.