En comparant deux listes en C #
-
19-09-2019 - |
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; //???
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.