10

IReadOnlyCollection<T>やなどの .NET 4.5 の新しい読み取り専用インターフェイスIReadOnlyDictionary<TKey,TValue>は非常に便利です。特にCollection<T>List<T>やなどの一般的な BCL 型に実装されているためDictionary<TKey,TValue>です。

ただし、実装するようにアップグレードされていませんHashSet<T>。また、これらのクラスは変更や破壊的変更なしでインターフェイスと一致するため、この決定の背後にあるロジックを確認できません。BCL チームが見落としていたのでしょうか、それとも私が見逃しているものがありますか?SortedSet<T>IReadOnlyCollection<T>

(セットを a 内にラップする組み込みの方法がないため、これは特に厄介ですIReadOnlyCollection<T>。実際、ReadOnlyCollection<T>ラップIList<T>ではなく、ラップしICollection<T>ます。独自のラッパーを作成するのは簡単なことです。)

4

2 に答える 2

13

Update 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 に答える