Passen Sie den Objektvergleich an, um Listen zu unterscheiden
Beim Umgang mit zwei generischen Listen, die benutzerdefinierte Objekte enthalten, ist das Extrahieren eindeutiger Elemente in einer Liste (insbesondere derjenigen, die in der anderen Liste nicht vorhanden sind) ein nützlicher Vorgang.
Die Methode.Except()
bietet hierfür eine effiziente Lösung. Es akzeptiert zwei Listenargumente und gibt eine neue Liste zurück, die Elemente enthält, die in der ersten Liste enthalten sind, aber nicht in der zweiten Liste gefunden werden.
Gleichheit und Standardvergleich überschreiben
Wenn Ihr benutzerdefinierter Objekttyp die Methoden Equals()
und GetHashCode()
überschreibt, können Sie .Except()
wie folgt verwenden:
<code class="language-csharp">var list3 = list1.Except(list2).ToList();</code>
In diesem Fall basiert der Vergleich von Objekten auf ihren überschriebenen Methoden. Etwaige Gleichheitsunterschiede spiegeln sich in den Unterschieden zwischen den Listen wider.
Benutzerdefinierter Gleichheitskomparator
Wenn Ihr Gleichheitskriterium jedoch eine benutzerdefinierte Implementierung erfordert, können Sie Ihre eigene IEqualityComparer<T>
definieren. Hier ist ein Beispiel für die Verwendung der ID als Vergleichsbasis:
<code class="language-csharp">public class IdComparer : IEqualityComparer<customobject> { // ... (实现如提供的答案中所示) }</code>
Sie können diesen benutzerdefinierten Komparator dann mit .Except()
verwenden über:
<code class="language-csharp">var list3 = list1.Except(list2, new IdComparer()).ToList();</code>
Dieser individuelle Vergleich stellt sicher, dass der .Except()
Vorgang Ihren spezifischen Gleichstellungsanforderungen entspricht.
Duplikate behalten
Es ist erwähnenswert, dass .Except()
doppelte Elemente ausschließt. Wenn Sie Duplikate behalten müssen, besteht eine andere Möglichkeit darin, die zweite Liste in HashSet
umzuwandeln und Folgendes zu verwenden:
<code class="language-csharp">var list3 = list1.Where(x => !set2.Contains(x)).ToList();</code>
Diese Methode behält alle eindeutigen Elemente in der resultierenden Liste bei list3
, einschließlich Duplikaten.
Das obige ist der detaillierte Inhalt vonWie kann ich in C# effizient unterschiedliche Elemente zwischen zwei Listen benutzerdefinierter Objekte finden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!