La comparación de dos List en C #
-
19-09-2019 - |
Pregunta
Tengo una clase llamada
MyClass
Esta clase hereda IEquatable e implementos es igual a la forma en que lo necesite. (Es decir: cuando comparo dos MiClase tyupe objects individualmente en código, funciona)
A continuación, cree dos listas:
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.
Cuando voy a comparar ListaA y listaB, debería tener cierto?
ListA.Equals(ListB)==true; //???
Solución
Pruebe lo siguiente
ListA.SequenceEquals(ListB);
SequenceEquals es un método de extensión disponible en la clase Enumerable
. Esto está disponible por defecto en C # 3.5 proyectos ya que viene con System.Linq
Otros consejos
Para responder a su pregunta, no, usted no debe tener cierto. List
y List<T>
no definen .equals, por lo que heredan Object.equals, que comprueba lo siguiente:
public static bool Equals(object objA, object objB)
{
return ((objA == objB) || (((objA != null) && (objB != null)) && objA.Equals(objB)));
}
Y objA.Equals(objB)
es virtual. Si no recuerdo mal, la implementación por defecto simplemente verifica por la igualdad de referencia (que apunta al mismo objeto en la memoria), por lo que su código se devuelve falso.