.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>
。我知道写我自己的包装器是微不足道的。)
答案 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;