Extraction des différences de listes d'objets personnalisés génériques en C#
Supposons que vous ayez deux listes, chacune contenant des objets personnalisés, et que vous ayez besoin d'un moyen d'obtenir une troisième liste qui contient uniquement les éléments présents dans la première liste mais pas dans le deuxième élément.
À cet effet, la méthode .Except()
est une option appropriée. Cette méthode suppose que votre objet personnalisé implémente les méthodes Equals
et GetHashCode
, fournissant ainsi un moyen de définir l'égalité des objets. Utiliser .Except()
est simple :
<code class="language-csharp">var list3 = list1.Except(list2).ToList();</code>
Cependant, si vous devez définir une égalité personnalisée en fonction d'une propriété spécifique (telle que l'ID), vous pouvez définir une IEqualityComparer<T>
implémentation. Prenons l'exemple suivant :
<code class="language-csharp">public class IdComparer : IEqualityComparer<CustomObject> { public int GetHashCode(CustomObject co) { if (co == null) { return 0; } return co.Id.GetHashCode(); } public bool Equals(CustomObject x1, CustomObject x2) { if (object.ReferenceEquals(x1, x2)) { return true; } if (object.ReferenceEquals(x1, null) || object.ReferenceEquals(x2, null)) { return false; } return x1.Id == x2.Id; } }</code>
Dans ce cas vous pouvez utiliser le code suivant pour récupérer la différence entre les deux listes :
<code class="language-csharp">var list3 = list1.Except(list2, new IdComparer()).ToList();</code>
Dans les cas où des doublons existent, pensez à créer un ensemble à partir de la deuxième liste et utilisez la méthode suivante :
<code class="language-csharp">var list3 = list1.Where(x => !set2.Contains(x)).ToList();</code>
Cela garantira que les doublons sont conservés dans la liste des résultats.
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!