2010-04-02 4 views
14

Ho due enumerabili con gli stessi identici elementi di riferimento e mi chiedo perché Equals non sarebbe vero.Uguaglianza tra due enumerabili

Come una domanda lato, il codice sottostante per confrontare ogni elemento funziona, ma ci deve essere un modo più 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

possibile duplicato di http://stackoverflow.com/questions/876508/questo-è-il-best-way-to-check-two-listt-lists-for-equality-in-c – Berryl

+0

possibile duplicato di [ Esiste un metodo integrato per confrontare le raccolte in C#?] (Http://stackoverflow.com/questions/43500/is-there-a-built-in-method-to-compare-collections-in-c) – nawfal

risposta

29

Dai uno sguardo allo Enumerable.SequenceEqual method.

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

A seconda del tipo di dati potrebbe anche essere necessario utilizzare il overloaded method che accetta un IEqualityComparer di definire un metodo di confronto personalizzato.

10

.equals è confrontando i riferimenti dei enumerables, non i elementi contengono.