Почему HashSet, но не установлен в C #?
Я понимаю, что C # имеет в некотором смыслеHashSet
а такжеset
типы. Я понимаю чтоHashSet
является. Но почемуset
это отдельное слово? Почему не каждый наборHashSet<Object>
?
Почему у C # нет универсальногоSet
тип, похожий наDictionary
тип? С моей точки зрения, я хотел бы иметь набор со стандартной производительностью поиска / добавления / удаления. Мне было бы все равно, реализовано ли это с помощью хэшей или как-то еще. Так почему бы не создать набор классов, который на самом деле был бы реализован какHashSet
в этой версии C #, но, возможно, в будущей версии несколько иначе?
Или почему бы не по крайней мере интерфейсISet
?
Спасибо всем, кто ответил ниже:ICollection
реализует многое из того, что вы ожидаете отISet
. С моей точки зрения, хотя,ICollection
реализуетIEnumerable
while наборы не должны быть перечисляемыми --- пример: набор действительных чисел от 1 до 2 (даже больше, наборы могут генерироваться динамически). Я согласен, что это небольшая разглагольствование, поскольку «нормальным программистам» редко нужны бесчисленные множества.
Ладно, думаю, я понял.HashSet
должен был называтьсяSet
но словоSet
зарезервирован в некотором смысле. В частности, создатели архитектуры .NET хотели иметь согласованный набор (sic!) Классов для разных языков. Это означает, что каждое имя стандартного класса не должно совпадать ни с одним ключевым словом в языках .NET. СловоSet
, однако, используется в VB.NET, который фактически нечувствителен к регистру (не так ли?), поэтому, к сожалению, там нет места для маневра.
Тайна разгадана
Эпилог Новый ответ Алексея Юрьевича ссылается на MSDN страница который описывает предстоящий интерфейс .NET 4.0ISet
который ведет себя так, как я думал, и должен быть реализованHashedSet
. Счастливый конец