¿Por qué tener HashSet pero no Establecer en C #?
Mi entendimiento es que C # tiene en algún sentidoHashSet
yset
tipos Entiendo queHashSet
es. Pero por quéset
es una palabra separada? ¿Por qué no cada conjunto esHashSet<Object>
?
¿Por qué C # no tiene genérico?Set
tipo, similar aDictionary
¿tipo? Desde mi punto de vista, me gustaría tener un conjunto con un rendimiento de búsqueda / adición / eliminación estándar. No me importaría mucho si se realiza con hashes o algo más. Entonces, ¿por qué no hacer una clase establecida que realmente se implementaría como unHashSet
¿En esta versión de C # pero quizás algo diferente en una versión futura?
O ¿por qué no al menos la interfazISet
?
Aprendí gracias a todos los que respondieron a continuación:ICollection
implementa mucho de lo que esperarías deISet
. Desde mi punto de vista, sin embargo,ICollection
implementosIEnumerable
mientras que los conjuntos no tienen que ser enumerables --- ejemplo: conjunto de números reales entre 1 y 2 (aún más, los conjuntos se pueden generar dinámicamente). Estoy de acuerdo en que esto es una perorata menor, ya que los 'programadores normales' rara vez necesitan conjuntos incontables.
Ok, creo que lo entiendo.HashSet
fue absolutamente destinado a ser llamadoSet
pero la palabraSet
Está reservado en algún sentido. Más específicamente, los creadores de la arquitectura .NET querían tener un conjunto consistente (sic!) De clases para diferentes idiomas. Esto significa que cada nombre de la clase estándar no debe coincidir con ninguna palabra clave en los idiomas .NET. La palabraSet
Sin embargo, se utiliza en VB.NET, que en realidad no distingue entre mayúsculas y minúsculas (¿verdad?), por lo que desafortunadamente no hay espacio para maniobrar allí.
Misterio resuelto :)
EpílogoLa nueva respuesta de Alex Y. enlaza con elPágina de MSDN que describe la próxima interfaz .NET 4.0ISet
que se comporta bastante como lo pensé y se implementa porHashedSet
. Final feliz.