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
Susan Sarandonoriginal
2025-01-20 19:32:12594parcourir

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> :

<code class="language-csharp">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);
    }
}</code>

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:
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