2012-08-07 79 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>已收到这些改进。

任何遗漏的原因的猜测是没有意义的。这可能是疏忽或时间压力,但坦率地说,这并没有多大意义。我怀疑即使我们喜欢相关的轶事,即使来自微软开发团队的直接投入也会有点主观。