2012-08-07 75 views
14

我剛剛發現,.NET Fx的現在有3個有用的界面:爲什麼HashSet <T>未實現IReadOnlyCollection <T>?

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

而且我有點困惑,爲什麼HashSet<T>沒有實現IReadOnlyCollection<T> ?有沒有什麼原因,或者微軟再次忘記了套裝?

UPD

google搜索兩小時,我發現有在BCL擁有.Count財產,但不實現IReadOnlyCollection<T>接口許多藏品之後。

UPD2

我發現這個職位http://social.msdn.microsoft.com/Forums/en/netfxbcl/thread/b4fb991a-3f5c-4923-93d4-7cd5c004f859IMMO Landwerth其中he've所說的以下

威爾等收藏列表之外的<答案>和字典<>支持這些接口更新到 ?

絕對。實際上,我們的所有內置集合類型已實現了IReadOnlyList <>和IReadOnlyDictionary <>。這意味着,您可以直接將List,T []或Dictionary <>的實例傳遞給採用它的IReadOnly版本的 API。

+0

好的,那麼爲什麼[列表](http://msdn.microsoft.com/en-us/library/6sh2ey19(v = vs.110))呢? – hazzik 2012-08-07 16:18:39

+0

奇怪。 Imho,一個不一致的設計決定。見http://www.infoq.com/news/2011/10/ReadOnly-WInRT/ – 2012-08-07 16:21:15

+0

哪裏有ISet ? – hazzik 2012-08-07 16:22:02

回答

13

在框架的版本4.5中,HashSet<T>未執行IReadOnlyCollection<out T>

該遺漏已在框架4.6版中解決(在問上述問題後將近12個月發佈)。

這些更正是not limited to HashSet<T>,其他收集如Stack<T>Queue<T>已收到這些改進。

任何遺漏的原因的猜測是沒有意義的。這可能是疏忽或時間壓力,但坦率地說,這並沒有多大意義。我懷疑即使我們喜歡相關的軼事,即使來自微軟開發團隊的直接投入也會有點主觀。