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

时间:2013-01-19 12:23:58

标签: collections .net-4.5 base-class-library

.NET 4.5中的新只读接口(例如IReadOnlyCollection<T>IReadOnlyDictionary<TKey,TValue>)非常有用,特别是因为它们已在常见的BCL类型上实现,例如Collection<T>,{{ 1}}和List<T>

但是,Dictionary<TKey,TValue>HashSet<T>尚未升级为实现SortedSet<T>,我无法看到此决定背后的逻辑,因为这些类与接口匹配而未进行任何修改或突破变化。是不是被BCL团队忽视了,还是我在这里缺少什么?

(这尤其令人讨厌,因为没有内置的方法将一个集合包装在IReadOnlyCollection<T>内。事实上,IReadOnlyCollection<T>包裹ReadOnlyCollection<T>而不是IList<T>。我知道写我自己的包装器是微不足道的。)

2 个答案:

答案 0 :(得分:13)

更新2015 :已在.NET 4.6中修复

  

只读接口在集合类型HashSet,LinkedList,Queue,SortedDictionary,SortedList,SortedSet和Stack上实现。 [944715]

https://dotnet2015.blob.core.windows.net/changes/dotnet46-changes.txt

答案 1 :(得分:5)

在4.5中添加的IReadOnlyXxx接口的最可能原因是因为他们需要使.NET集合在WinRT项目(商店和电话应用程序)中可用。必须将集合正确映射到WinRT的IVectorView&lt;&gt;和IMapView&lt;&gt;接口。这是通过CLR中内置的语言投影自动完成的。对于WinRT没有等同于ISet&lt;&gt;的紧要关头。接口所以没有必要更改HashSet&lt;&gt;。


更新:在.NET 4.5.1中解决了不对称问题,毫无疑问,感谢大量的客户反馈:),HashSet&lt;&gt;现在还实现了IReadOnlyCollection&lt;&gt;