C# LanguageEst égal à et GetHashCode

Remarques

Chaque implémentation de Equals doit répondre aux exigences suivantes:

  • Réfléchissant : Un objet doit être égal à lui-même.
    x.Equals(x) renvoie true .

  • Symétrique : Il n'y a pas de différence si je compare x à y ou y à x - le résultat est le même.
    x.Equals(y) renvoie la même valeur que y.Equals(x) .

  • Transitif : Si un objet est égal à un autre objet et que celui-ci est égal à un troisième, le premier doit être égal au troisième.
    if (x.Equals(y) && y.Equals(z)) renvoie true , alors x.Equals(z) renvoie true .

  • Cohérent : Si vous comparez un objet à plusieurs fois, le résultat est toujours le même.
    Les invocations successives de x.Equals(y) renvoient la même valeur tant que les objets référencés par x et y ne sont pas modifiés.

  • Comparaison à null : Aucun objet n'est égal à null .
    x.Equals(null) renvoie false .

Implémentations de GetHashCode :

  • Compatible avec Equals : Si deux objets sont égaux (ce qui signifie que Equals renvoie true), GetHashCode doit renvoyer la même valeur pour chacun d'eux.

  • Large range : Si deux objets ne sont pas égaux ( Equals dit false), il devrait y avoir une forte probabilité que leurs codes de hachage soient distincts. Un hachage parfait n'est souvent pas possible car il y a un nombre limité de valeurs à choisir.

  • Bon marché : le calcul du code de hachage dans tous les cas devrait être peu coûteux.

Voir: Directives pour la surcharge d'Equals () et de l'opérateur ==

Est égal à et GetHashCode Exemples Liés