我刚刚发现.NET Fx现在有3个有用的接口:
IReadOnlyCollection<T>
IReadOnlyList<T>
IReadOnlyDictionary<K,V>
我有点困惑为什么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。
答案 0 :(得分:15)
在框架的4.5版本中,HashSet<T>
未实现IReadOnlyCollection<out T>
。
该遗漏在框架的第4.6版中得到了解决(在提出上述问题后近12个月后发布)。
这些更正为not limited to HashSet<T>
,其他集合(例如Stack<T>
和Queue<T>
)已获得这些改进。
对任何遗漏的原因的猜测是没有实际意义的。这可能是疏忽或时间压力,但坦率地说,它没什么影响。我怀疑,即使我们喜欢相关的轶事,即使微软开发团队的直接输入也会有些主观。