2010-04-02 10 views
14

Tengo dos enumerables con exactamente los mismos elementos de referencia, y me pregunto por qué Equal no sería cierto.Igualdad entre dos enumerables

Como cuestión lado, el código de abajo para comparar cada elemento funciona, pero tiene que haber una forma más elegante

var other = (ActivityService) obj; 
if (!AllAccounts.Count().Equals(other.AllAccounts.Count())) return false; 
for (int i = 0; i < AllAccounts.Count(); i++) { 
    if (!AllAccounts.ElementAt(i).Equals(other.AllAccounts.ElementAt(i))) { 
     return false; 
    } 
} 
return true; 
+0

posible duplicado de http://stackoverflow.com/questions/876508/what-is-the-best-way-to-check-two-listt-lists-for-equality-in-c – Berryl

+0

posible duplicado de [ ¿Existe un método incorporado para comparar colecciones en C#?] (Http://stackoverflow.com/questions/43500/is-there-a-built-in-method-to-compare-collections-in-c) – nawfal

Respuesta

29

Eche un vistazo a Enumerable.SequenceEqual method.

bool result = AllAccounts.SequenceEqual(other.AllAccounts); 

Dependiendo del tipo de datos También puede ser necesario utilizar el overloaded method que acepta un IEqualityComparer para definir un método de comparación personalizado.

10

.equals es comparar las referencias de los enumerables, no los elementos ellos contienen