Maison > développement back-end > C++ > Pourquoi la méthode Distinct de LINQ est-elle inefficace avec les objets personnalisés et comment puis-je y remédier ?

Pourquoi la méthode Distinct de LINQ est-elle inefficace avec les objets personnalisés et comment puis-je y remédier ?

Susan Sarandon
Libérer: 2025-01-20 19:32:12
original
592 Les gens l'ont consulté

Why is LINQ's Distinct Method Inefficient with Custom Objects, and How Can I Fix It?

Résoudre l'inefficacité des méthodes distinctes de LINQ pour les objets personnalisés

La méthode Distinct() de LINQ peut être inefficace lorsqu'elle est utilisée avec des objets personnalisés. En effet, par défaut, il s'appuie sur l'égalité des références, ce qui signifie qu'il ne considère deux objets distincts que s'ils occupent des emplacements mémoire différents. Les objets identiques (avec les mêmes valeurs de propriété) seront traités comme des entités distinctes, conduisant à des résultats dupliqués.

La solution réside dans l'implémentation de l'interface IEquatable<T> au sein de votre classe d'objet personnalisée. Cela vous permet de définir comment l'égalité est déterminée pour vos objets, en fonction de leurs propriétés plutôt que de leurs adresses mémoire.

Voici une classe Author améliorée implémentant IEquatable<Author> :

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

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

    public override int GetHashCode()
    {
        return HashCode.Combine(FirstName, LastName);
    }
}
Copier après la connexion

En remplaçant la méthode Equals() et en implémentant GetHashCode(), vous fournissez à Distinct() la logique dont il a besoin pour identifier et supprimer correctement les objets Author en double en fonction de leurs propriétés FirstName et LastName. Notez l'utilisation de HashCode.Combine pour une génération de code de hachage plus robuste. Cela garantit que les objets considérés comme égaux par Equals() produisent également le même code de hachage. Grâce à cette approche, Distinct() identifiera et supprimera désormais avec précision les objets auteurs en double en fonction de leurs noms.

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