Personnaliser la comparaison d'objets pour différencier les listes
Lorsqu'il s'agit de deux listes génériques contenant des objets personnalisés, extraire des éléments uniques dans une liste (en particulier ceux qui ne sont pas présents dans l'autre liste) est une opération utile.
La méthode.Except()
apporte une solution efficace pour cela. Il accepte deux arguments de liste et renvoie une nouvelle liste contenant les éléments de la première liste mais introuvables dans la seconde liste.
Remplacer l'égalité et la comparaison par défaut
Si votre type d'objet personnalisé remplace les méthodes Equals()
et GetHashCode()
, vous pouvez utiliser .Except()
comme suit :
<code class="language-csharp">var list3 = list1.Except(list2).ToList();</code>
Dans ce cas, la comparaison des objets repose sur leurs méthodes remplacées. Toute différence d'égalité sera reflétée dans les différences entre les listes.
Comparateur d'égalité personnalisé
Cependant, si votre critère d'égalité nécessite une implémentation personnalisée, vous pouvez définir la vôtre IEqualityComparer<T>
. Voici un exemple d'utilisation de l'ID comme base de comparaison :
<code class="language-csharp">public class IdComparer : IEqualityComparer<customobject> { // ... (实现如提供的答案中所示) }</code>
Vous pourrez ensuite utiliser ce comparateur personnalisé avec .Except()
via :
<code class="language-csharp">var list3 = list1.Except(list2, new IdComparer()).ToList();</code>
Cette comparaison personnalisée garantira que l'opération .Except()
répond à vos exigences spécifiques en matière d'égalité.
Conserver les doublons
Il convient de noter que .Except()
exclura les éléments en double. Si vous devez conserver les doublons, une autre méthode consiste à convertir la deuxième liste en HashSet
et à utiliser ceci :
<code class="language-csharp">var list3 = list1.Where(x => !set2.Contains(x)).ToList();</code>
Cette méthode conservera tous les éléments uniques dans la liste résultante list3
, y compris les doublons.
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!