10

.NET 4.5 中新的只读接口(例如IReadOnlyCollection<T>IReadOnlyDictionary<TKey,TValue>)非常有用,尤其是因为它们已在常见的 BCL 类型(例如Collection<T>List<T>Dictionary<TKey,TValue>.

但是,HashSet<T>SortedSet<T>没有升级为 implement IReadOnlyCollection<T>,我看不出这个决定背后的逻辑,因为这些类在没有任何修改或破坏性更改的情况下与接口匹配。它只是被 BCL 团队忽略了,还是我在这里遗漏了什么?

(这特别烦人,因为没有内置方法可以将集合包装在 aIReadOnlyCollection<T>中。确实,ReadOnlyCollection<T>包装IList<T>而不是ICollection<T>。我知道编写自己的包装器是微不足道的。)

4

2 回答 2

13

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

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

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

于 2015-07-30T14:04:33.373 回答
5

在 4.5 中添加 IReadOnlyXxx 接口的最可能原因是因为它们需要使 .NET 集合在 WinRT 项目(商店和电话应用程序)中可用。需要将集合正确映射到 WinRT 的 IVectorView<> 和 IMapView<> 接口。这是由 CLR 中内置的语言投影自动完成的。WinRT 没有等效的 ISet<> 接口,因此根本不需要更改 HashSet<>。


更新:在 .NET 4.5.1 中解决了不对称问题,这无疑要感谢大量的客户反馈 :),HashSet<> 现在也实现了 IReadOnlyCollection<>

于 2013-01-19T14:52:56.267 回答