Vergleicht man zwei List in C #
-
19-09-2019 - |
Frage
Ich habe eine Klasse mit dem Namen
MyClass
Diese Klasse erbt IEquatable und implementiert die Art und Weise gleich ich es brauchen. (Bedeutung: wenn ich zwei MyClass vergleichen tyupe in Code Objekte einzeln, es funktioniert)
Ich erstelle dann zwei Liste:
var ListA = new List<MyClass>();
var ListB = new List<MyClass>();
// Add distinct objects that are equal to one another to
// ListA and ListB in such a way that they are not added in the same order.
Wenn ich ListA und ListB vergleichen zu können, sollte ich wahr werden?
ListA.Equals(ListB)==true; //???
Lösung
Versuchen Sie, die folgende
ListA.SequenceEquals(ListB);
SequenceEquals ist eine Erweiterung Methode auf der Enumerable
Klasse zur Verfügung. Dies ist standardmäßig in C # 3.5 Projekte zur Verfügung, wie es mit System.Linq
Andere Tipps
Um Ihre Frage zu beantworten, nein, Sie sollten nicht wahr bekommen. List
und List<T>
definieren nicht .Equals, so dass sie erben Object.Equals, die überprüft, die folgende:
public static bool Equals(object objA, object objB)
{
return ((objA == objB) || (((objA != null) && (objB != null)) && objA.Equals(objB)));
}
Und objA.Equals(objB)
ist virtuell. Wenn ich mich richtig erinnere, nur die Standardimplementierung überprüft Referenz Gleichheit (zeigt auf das gleiche Objekt im Speicher), so würde der Code falsch zurück.