为什么HashSet <t>没有实现IReadOnlyCollection <t>?</t> </t>

时间:2012-08-07 16:05:03

标签: c# .net collections .net-4.5

我刚刚发现.NET Fx现在有3个有用的接口:

  1. IReadOnlyCollection<T>
  2. IReadOnlyList<T>
  3. IReadOnlyDictionary<K,V>
  4. 我有点困惑为什么HashSet<T>没有实现IReadOnlyCollection<T>?有没有理由,或者微软再次忘记了套装?

    UPD

    经过两个小时的谷歌搜索后,我发现BCL中有很多具有.Count属性但未实现IReadOnlyCollection<T>接口的集合。

    UPD2

    我发现了这篇文章http://social.msdn.microsoft.com/Forums/en/netfxbcl/thread/b4fb991a-3f5c-4923-93d4-7cd5c004f859以及 Immo Landwerth 的回答,他已经说过了

      

    除了List&lt;&gt;之外的其他收藏品和词典&lt;&gt;更新为   支持这些接口吗?

         

    绝对。事实上,我们所有的内置集合类型已经存在   实现IReadOnlyList&lt;&gt;和IReadOnlyDictionary&lt;&gt;。这意味着,你   可以直接传递List,T []或Dictionary&lt;&gt;的实例到了   采用IReadOnly版本的API。

1 个答案:

答案 0 :(得分:15)

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

该遗漏在框架的第4.6版中得到了解决(在提出上述问题后近12个月后发布)。

这些更正为not limited to HashSet<T>,其他集合(例如Stack<T>Queue<T>)已获得这些改进。

对任何遗漏的原因的猜测是没有实际意义的。这可能是疏忽或时间压力,但坦率地说,它没什么影响。我怀疑,即使我们喜欢相关的轶事,即使微软开发团队的直接输入也会有些主观。