Por que ter HashSet mas não definido em c #?

Pergunta antiga

Meu entendimento é que C # tem em algum sentidoHashSet eset tipos. Eu entendo o queHashSet é. Mas por queset é uma palavra separada? Por que nem todo conjunto éHashSet<Object>?

Nova pergunta

Por que o C # não tem genéricoSet tipo, semelhante aDictionary tipo? Do meu ponto de vista, gostaria de ter um conjunto com desempenho padrão de pesquisa / adição / exclusão. Eu não me importo muito se é realizado com hashes ou outra coisa. Então, por que não criar uma classe set que seria realmente implementada como umHashSet nesta versão do c # mas talvez um pouco diferente em uma versão futura?

Ou porque não, pelo menos, interfaceISet?

Responda

Aprendi graças a todos que responderam abaixo:ICollection implementa muito do que você esperaria deISet. Do meu ponto de vista,ICollection implementaIEnumerable enquanto conjuntos não precisam ser enumeráveis ​​- exemplo: conjunto de números reais entre 1 e 2 (ainda mais, conjuntos podem ser gerados dinamicamente). Eu concordo que este é um discurso menor, já que 'programadores normais' raramente precisam de conjuntos incontáveis.

Ok, acho que entendi.HashSet foi absolutamente destinado a ser chamadoSet mas a palavraSet é reservado em algum sentido. Mais especificamente, os criadores da arquitetura .NET queriam ter um conjunto consistente (sic!) De classes para diferentes idiomas. Isso significa que todos os nomes da classe padrão não devem coincidir com nenhuma palavra-chave nos idiomas .NET. A palavraSet, no entanto, é usado em VB.NET, que é na verdade insensível a maiúsculas e minúsculas (é?) por isso, infelizmente, não há espaço para manobras lá.

Mistério resolvido :)

Epílogo

A nova resposta por Alex Y. links para oPágina do MSDN que descreve a próxima interface do .NET 4.0ISet que se comporta praticamente como eu pensei que deveria e é implementado porHashedSet. Final feliz.

questionAnswers(7)

yourAnswerToTheQuestion