Почему HashSet <T> не реализует IReadOnlyCollection <T>?
Я только что нашел, что .NET Fx теперь имеет 3 полезных интерфейса:
И я немного смущен, почему HashSet<T>
не реализует IReadOnlyCollection<T>
? Есть ли какие-либо причины, или Microsoft просто забыла о наборах снова?
UPD
После двухчасовой googling я обнаружил, что в BCL есть много коллекций, у которых есть свойство .Count
, но не реализует интерфейс IReadOnlyCollection<T>
.
UPD2
Я нашел этот пост http://social.msdn.microsoft.com/Forums/en/netfxbcl/thread/b4fb991a-3f5c-4923-93d4-7cd5c004f859 и ответ Immo Landwerth, где он сказал следующее
Будут ли обновляться другие коллекции, кроме List < > и Dictionary < > , чтобы поддерживают эти интерфейсы?
Совершенно верно. На самом деле, все наши встроенные типы коллекций уже реализовать IReadOnlyList < > и IReadOnlyDictionary < > . Это значит, что ты может напрямую передать экземпляр List, T [] или Dictionary < > в API, который использует IReadOnly-версию.
Ответы
Ответ 1
В версии 4.5 рамки HashSet<T>
не реализуется IReadOnlyCollection<out T>
.
Это упущение было разрешено в версии 4.6 структуры (выпущено почти через 12 месяцев после того, как был задан вышеуказанный вопрос).
Эти исправления не ограничены HashSet<T>
, другие коллекции, такие как Stack<T>
и Queue<T>
получили эти улучшения.
Спекуляция по причине любого упущения является спорной. Это может быть надзор или давление во времени, но, откровенно говоря, это не имеет большого значения. Я подозреваю, что даже прямой ввод от команды разработчиков Microsoft был бы несколько субъективным, даже если нам нравятся связанные анекдоты.