2010-03-11 8 views
3

J'ai une classe appeléeEn comparant deux listes <MyClass> en C#

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; //??? 

Répondre

7

Essayez les

ListA.SequenceEquals(ListB); 

SequenceEquals suivant 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

0

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 points 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 l'égalité de référence (pointant vers le même objet en mémoire), donc votre code retournera false.

Questions connexes