Comparaison et identification des différences entre les listes C#
Déterminer efficacement les différences entre deux listes est une tâche courante en programmation C#. La méthode .Except()
offre une solution puissante, mais son application peut être nuancée, notamment lorsque l'on travaille avec des objets personnalisés.
Utilisation de .Except()
avec l'égalité de type de référence
Pour les objets personnalisés (par exemple, CustomObjects
) qui remplacent correctement les méthodes Equals()
et GetHashCode()
, l'utilisation de .Except()
est simple :
<code class="language-csharp">var list3 = list1.Except(list2).ToList();</code>
Cela crée list3
, contenant des éléments de list1
qui ne sont pas dans list2
.
Comparaison d'égalité personnalisée avec IEqualityComparer
Des contrôles d'égalité plus complexes, tels que la comparaison basée sur une propriété spécifique (comme Id
), nécessitent l'implémentation de l'interface IEqualityComparer<T>
. Voici un exemple :
<code class="language-csharp">public class IdComparer : IEqualityComparer<CustomObject> { public int GetHashCode(CustomObject co) => co.Id.GetHashCode(); public bool Equals(CustomObject x1, CustomObject x2) => x1.Id == x2.Id; }</code>
Ensuite, utilisez ce comparateur avec .Except()
:
<code class="language-csharp">var list3 = list1.Except(list2, new IdComparer()).ToList();</code>
Gestion des éléments en double
Le standard .Except()
supprime les doublons. Pour les préserver, utilisez cette alternative :
<code class="language-csharp">var set2 = new HashSet<CustomObject>(list2); var list3 = list1.Where(x => !set2.Contains(x)).ToList();</code>
Cela exploite un HashSet
pour une vérification efficace des membres, ce qui entraîne list3
avec des doublons conservés. Notez que l'ordre des éléments dans list3
peut différer de l'original list1
.
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!