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; //???
War es hilfreich?

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

kommt

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top