Pergunta

Vamos dizer que eu tenho uma classe chamada myclass.

No meu código eu tenho duas instâncias do myclass, MyClass1 e MinhaClasse2. Tudo sobre eles é propriedades (públicas e privadas) são idênticas.

Se eu tentar adicionar os dois para um HashSet terá que adicionar ambos ou apenas um? Se ele adiciona tanto e eu não quero que ele, posso overidde igual na definição myclass eo Hasset vai saber como usá-lo?

Foi útil?

Solução

A resposta curta, depende do seu objeto método Equals.

resposta mais longa:

HashSet usará um IEqualityComparer para determinar se dois objetos são iguais. Se você não fornecer um usará EqualityComparer.Default; que efetivamente usa apenas object.Equals (a, b), mais algumas coisas para evitar os tipos de valor de boxe.

Verificar os docs para object.Equals(a, b):. Ele é efetivamente apenas realizando a.Equals(b) após a verificação de nulos

A implementação padrão de object.Equals(other) é para verificar se há igualdade de referência única (ou seja, eles são exatamente a mesma instância de um objeto), mas você pode substituir esse para executar qualquer verificação de que você gosta, como verificar se um campo de ID é idêntico. Note, ao substituir Igual a você também tem que substituir GetHashCode.

Se você quer mudar a forma como HashSet determina a igualdade sem alterar a definição do objeto que você pode fornecê-la um IEqualityComparer personalizado em vez.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top