HashSets e diferentes instâncias da classe com todos os membros idênticos
-
19-09-2019 - |
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?
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.