Maison > développement back-end > C++ > Comment remplacer correctement Equals() et GetHashCode() pour une comparaison d'objets efficace en C# ?

Comment remplacer correctement Equals() et GetHashCode() pour une comparaison d'objets efficace en C# ?

DDD
Libérer: 2025-01-04 21:16:39
original
208 Les gens l'ont consulté

How to Properly Override Equals() and GetHashCode() for Effective Object Comparison in C#?

Remplacer Equals() et GetHashCode() pour une équivalence d'objet efficace

Dans la quête de l'égalité des objets, Equals() et GetHashCode( ) les méthodes jouent un rôle central. Pour les classes personnalisées, il devient nécessaire de remplacer ces méthodes pour établir un mécanisme de comparaison et de hachage significatif. Cet article met en lumière l'approche correcte pour implémenter ces méthodes dans le contexte d'une classe RecommendationDTO, lui permettant de s'intégrer de manière transparente à la méthode LINQ Except().

Remplacer Equals()

  1. Types nullables : Dans le code fourni, la méthode Equals() vérifie null références. Cependant, pour les types nullables comme DateTime ?, la comparaison doit être modifiée pour gérer les valeurs nulles de manière appropriée.
  2. Considérer toutes les propriétés : La comparaison d'égalité doit prendre en compte toutes les propriétés pertinentes qui définissent l'équivalence commerciale de les objets. Dans ce cas, seul ReferenceId est comparé, mais d'autres propriétés cruciales peuvent également devoir être incluses.

Remplacement de GetHashCode()

  1. Calcul du code de hachage : La méthode GetHashCode() doit calculer un code de hachage basé sur les propriétés utilisées pour la comparaison d'égalité. Puisque ReferenceId est utilisé pour l'égalité, il doit également être utilisé pour calculer le code de hachage.
  2. Hashage cohérent : Le code de hachage doit être cohérent entre plusieurs invocations pour le même objet. Cela garantit que les objets ayant les mêmes propriétés auront toujours le même code de hachage, conduisant à des opérations de hachage et de recherche efficaces.

Exemple de mise en œuvre

Voici une version améliorée implémentation des méthodes Equals() et GetHashCode() pour la classe RecommendationDTO :

public override bool Equals(object obj)
{
    var item = obj as RecommendationDTO;

    if (item == null || ReferenceId == Guid.Empty || item.ReferenceId == Guid.Empty)
    {
        return false;
    }

    return this.RecommendationId.Equals(item.RecommendationId);
}

public override int GetHashCode()
{
    if (ReferenceId == Guid.Empty)
    {
        throw new InvalidOperationException("ReferenceId cannot be Guid.Empty when calculating hash code.");
    }

    return this.RecommendationId.GetHashCode();
}
Copier après la connexion

En implémentant Equals() et GetHashCode() de cette manière, la classe RecommendationDTO peut désormais être utilisée efficacement avec la méthode LINQ Except(), garantissant que les objets ayant les mêmes propriétés significatives sont traités comme distincts.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal