Maison > développement back-end > C++ > Pourquoi Distinct de LINQ ne fonctionne-t-il pas comme prévu avec les objets personnalisés ?

Pourquoi Distinct de LINQ ne fonctionne-t-il pas comme prévu avec les objets personnalisés ?

Patricia Arquette
Libérer: 2025-01-20 19:46:13
original
782 Les gens l'ont consulté

Why Doesn't LINQ's Distinct Work as Expected with Custom Objects?

Comprendre les limitations distinctes des méthodes LINQ avec les objets personnalisés

La méthode

LINQ Distinct() peut être imprévisible lorsqu'elle est utilisée avec des objets personnalisés. Le comportement par défaut repose sur l'égalité des références d'objet, et non sur l'égalité de leurs propriétés. Cela signifie que deux objets distincts avec des valeurs de propriété identiques seront toujours considérés comme uniques par Distinct().

Pour surmonter cette limitation, vous devez définir comment vos objets personnalisés déterminent l'égalité. Une solution courante consiste à implémenter l'interface IEquatable<T>.

Implémentation d'IEquatable pour l'égalité des objets personnalisés

Illustrons cela avec un Author cours :

public class Author : IEquatable<Author>
{
    public string FirstName { get; set; }
    public string LastName { get; set; }

    public bool Equals(Author other)
    {
        if (other == null) return false;
        return FirstName == other.FirstName && LastName == other.LastName;
    }

    public override int GetHashCode()
    {
        unchecked // Overflow is fine, just wrap
        {
            int hash = (FirstName != null ? FirstName.GetHashCode() : 0);
            hash = (hash * 397) ^ (LastName != null ? LastName.GetHashCode() : 0);
            return hash;
        }
    }
}
Copier après la connexion

Cette implémentation définit l'égalité :

  • Equals(Author other) : Cette méthode compare les propriétés FirstName et LastName de deux Author objets. Il renvoie true si les deux propriétés sont égales, et false sinon. Des vérifications nulles sont incluses pour plus de robustesse.

  • GetHashCode() : Cette méthode génère un code de hachage basé sur les propriétés FirstName et LastName. Un code de hachage cohérent est crucial pour un fonctionnement Distinct() efficace. Le mot-clé unchecked et la multiplication de nombres premiers améliorent la distribution des codes de hachage.

En implémentant Equals() et GetHashCode() correctement, vous vous assurez que Distinct() considère les objets avec les mêmes valeurs de propriété comme égaux, fournissant les résultats attendus.

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!

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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal