Старый вопрос
Я понимаю, что С# имеет в некотором смысле типы HashSet
и set
. Я понимаю, что такое HashSet
. Но почему set
- это отдельное слово? Почему не каждый набор HashSet<Object>
?
Новый вопрос
Почему С# не имеет общего типа set
, аналогичного типу Dictionary
? С моей точки зрения, я хотел бы иметь набор со стандартным представлением/добавлением/удалением. Мне было бы все равно, реализовано ли это с помощью хэшей или чего-то еще. Итак, почему бы не создать класс классов, который фактически будет реализован как HashSet
в этой версии С#, но, возможно, несколько отличается в будущей версии?
Или почему бы не по крайней мере интерфейс ISet
?
Ответ
Спасибо всем, кто ответил ниже: ICollection
реализует многое из того, что вы ожидаете от ISet
. С моей точки зрения, ICollection
реализует IEnumerable
, в то время как для наборов не нужно перечислить --- пример: набор действительных чисел между 1 и 2 (тем более набор может генерироваться динамически). Я согласен, что это незначительное разглашение, поскольку "нормальным программистам" редко нужны несчетные множества.
Хорошо, думаю, я понял. HashSet
должен был называться set
, но слово set
зарезервировано в некотором смысле. Более конкретно, создатели архитектуры .NET хотели иметь последовательный набор (sic!) Классов для разных языков. Это означает, что каждое имя стандартного класса не должно совпадать с каким-либо ключевым словом на языках .NET. Слово set
, однако, используется в VB.NET, который на самом деле нечувствителен к регистру (это?), Поэтому, к сожалению, там нет места для маневра.
Тайна решена:)