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; //???
È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top