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); } }
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!