System.HashCode: nunca foi tão fácil implementar o método GetHashCode de suas classes

Cássio Farias Machado
CWI Software
Published in
2 min readAug 30, 2019

Quem nunca perdeu bons minutos pesquisando na internet quando teve que sobrescrever o método GetHashCode? Eu já!

Era bem comum encontrarmos implementações confusas como essa:

Realmente, não era uma tarefa fácil escolher uma implementação que gerasse um bom hash. Isso mesmo que você leu, não era! Desde a versão 2.1 do .Net Core, foi adicionada uma nova struct, chamada System.HashCode, que facilita — e muito — a implementação do método.

A classe Person, apresentada anteriormente, agora pode ser implementada assim:

Deadpool surpreso com a struct System.HashCode

Bem mais fácil né!?

O método estático Combine do exemplo pode gerar hashes combinando até oito parâmetros. Essa é a forma mais simples de utilizar a nova API. Contudo, ela também fornece métodos de instância, que podem ser utilizados para gerar seus hashes, como é o caso do ToHashCode. Você pode conferir mais exemplos na documentação oficial da struct.

A proposta dessa API começou a ser discutida nessa issue no GitHub do CoreFx, em dezembro de 2016, e foi lançada junto a versão 2.1 do .Net Core em 30 de maio de 2018. Ela também está disponível através do pacote Nuget Microsoft.Bcl.HashCode para as versões anteriores do Framework, mas ele ainda está em preview.

E ai o que achou da novidade? Eu gostei muito! É sempre bom quando diminuímos complexidade de implementações rotineiras e podemos focar no que realmente importa: as regras do nosso sistema.

Referências

--

--