Differenzextraktion generischer benutzerdefinierter Objektlisten in C#
Angenommen, Sie haben zwei Listen, die jeweils benutzerdefinierte Objekte enthalten, und Sie benötigen eine Möglichkeit, eine dritte Liste zu erhalten, die nur Elemente enthält, die in der ersten Liste, aber nicht im zweiten Element vorhanden sind.
Hierfür bietet sich die Methode .Except()
an. Diese Methode geht davon aus, dass Ihr benutzerdefiniertes Objekt die Methoden Equals
und GetHashCode
implementiert und somit eine Möglichkeit bietet, Objektgleichheit zu definieren. Die Verwendung von .Except()
ist einfach:
<code class="language-csharp">var list3 = list1.Except(list2).ToList();</code>
Wenn Sie jedoch die Gleichheit basierend auf einer bestimmten Eigenschaft (z. B. ID) individuell definieren müssen, können Sie eine IEqualityComparer<T>
-Implementierung definieren. Betrachten Sie das folgende Beispiel:
<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>
In diesem Fall können Sie den folgenden Code verwenden, um die Differenz zwischen den beiden Listen abzurufen:
<code class="language-csharp">var list3 = list1.Except(list2, new IdComparer()).ToList();</code>
In Fällen, in denen Duplikate vorhanden sind, sollten Sie erwägen, einen Satz aus der zweiten Liste zu erstellen und die folgende Methode zu verwenden:
<code class="language-csharp">var list3 = list1.Where(x => !set2.Contains(x)).ToList();</code>
Dadurch wird sichergestellt, dass Duplikate in der Ergebnisliste erhalten bleiben.
Das obige ist der detaillierte Inhalt vonWie kann ich den Unterschied zwischen zwei Listen benutzerdefinierter Objekte in C# effizient finden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!