Quelle est la meilleure façon de créer votre propre méthode gethashcode pour une classe en C #? Supposons que j'ai une classe simple (qui remplace la méthode des égaux), comme suit: dois-je utiliser le code par défaut de la méthode gethashcode? P> public override int GetHashCode()
{
return names.GetHashCode() + values.GetHashCode() ;
}
4 Réponses :
Pour mettre en œuvre à implémenter system.array code> ne remplace pas
gethascode code> ou
est égal à code>, ils utilisent donc l'égalité de référence. Par conséquent, vous ne devriez pas les appeler.
gethascode code>, voir
est égal à code>, utilisez le
séquenceequal code>
méthode d'extension. P> séquenceequal code>, comme ceci: p>
ienumerable
ilist
Merci pour la réponse excellente et rapide. Existe-t-il une alternative à la séquenceequale qui fonctionne avec .NET Framework 2.0?
Il est vraiment important de vous assurer de garder la substitution de .gethashcode () à pas em> avec des angles (). P>
Fondamentalement, vous devez vous assurer qu'ils considèrent les mêmes champs afin de ne pas violer la première des trois règles de GetHashCode (de msdn objet.gethashcode () ) p>
Si deux objets comparent comme étant égal, le
Méthode gethashcode pour chaque objet
doit renvoyer la même valeur. Cependant,
Si deux objets ne comparent pas comme
égal, les méthodes gethashcode pour le
Deux objets n'ont pas à revenir
différentes valeurs. P>
blockQuote>
En d'autres termes, vous devez vous assurer que chaque fois que. Particules considère deux instances égales, elles auront également le même .gethashcode (). P>
Comme mentionné par quelqu'un d'autre ici, Cette question détaille une bonne implémentation.
Si vous êtes intéressé, j'ai écrit quelques articles de blog sur l'enquête sur les codes de hash au début de l'année dernière. Vous pouvez trouver mes Ramblings ici (la première entrée de blog que j'ai écrite sur le sujet) p>
Il y a une bonne discussion sur les problèmes Ici , et la mise à jour la plus récente fait référence au classe abstraite de baseObject fournie par Sharparchitecture. p>
Si vous voulez quelque chose de plus ad hoc em>, j'ai constaté que le code que Resharper génère pour des égaux () et gethashcode () va bien. P>
Si vous utilisez dotnetcore 2.1+, vous pouvez utiliser HASHCODE 'S Méthode associé code> à toutes les propriétés, il est très facile à utiliser et à efficacité. p>
Vous ne remplissez pas correctement ici.
En fait, je pense que cela conduira à Stackoverflow.
Non, cela ne déborde pas de la pile. Cependant, cela ne fonctionnera pas non plus.
Il l'a déjà conduit à Stackoverflow.