Confronto di due List<MyClass> in C#
-
19-09-2019 - |
Domanda
Ho una lezione chiamata
MyClass
Questa classe eredita IEquatable e implementa equals nel modo in cui ne ho bisogno.(Senso:quando confronto due oggetti di tipo MyClass individualmente nel codice, funziona)
Creo quindi due List:
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.
Quando vado a confrontare ListA e ListB, dovrei ottenere true?
ListA.Equals(ListB)==true; //???
Soluzione
Prova quanto segue
ListA.SequenceEquals(ListB);
SequenceEquals è un metodo di estensione disponibile su Enumerable
classe.Questo è disponibile per impostazione predefinita nei progetti C# 3.5 poiché viene fornito con System.Linq
Altri suggerimenti
Per rispondere alla tua domanda, no, non dovresti essere vero. List
E List<T>
non definiscono .Equals, quindi ereditano Object.Equals, che controlla quanto segue:
public static bool Equals(object objA, object objB)
{
return ((objA == objB) || (((objA != null) && (objB != null)) && objA.Equals(objB)));
}
E objA.Equals(objB)
è virtuale.Se ricordo bene, l'implementazione predefinita controlla semplicemente l'uguaglianza dei riferimenti (puntando allo stesso oggetto in memoria), quindi il tuo codice restituirebbe false.