Question

J'ai une classe appelée

MyClass

Cette classe hérite IEquatable et met en œuvre équivaut à la façon dont je besoin pour. (Signification: quand je compare deux MyClass tyupe objets individuellement dans le code, cela fonctionne)

Je puis créer deux listes:

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.

Quand je vais à comparer ListA et Liste_B, devrais-je obtenir vrai?

ListA.Equals(ListB)==true; //???
Était-ce utile?

La solution

Effectuez les opérations suivantes

ListA.SequenceEquals(ListB);

SequenceEquals est une méthode d'extension disponible sur la classe Enumerable. Il est disponible par défaut dans C # 3.5 projets il est livré avec System.Linq

Autres conseils

Pour répondre à votre question, non, vous ne devriez pas obtenir vrai. List et List<T> ne définissent pas Equals, ils héritent Object.Equals, qui vérifie les éléments suivants:

public static bool Equals(object objA, object objB)
{
    return ((objA == objB) || (((objA != null) && (objB != null)) && objA.Equals(objB)));
}

Et objA.Equals(objB) est virtuel. Si je me souviens bien, l'implémentation par défaut vérifie juste pour l'égalité de référence (pointant vers le même objet en mémoire), de sorte que votre code retournerait faux.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top