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; //???
¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top