2010-04-02 4 views
14

У меня есть два перечисления с одинаковыми ссылочными элементами и интересно, почему Equals не верны.Равенство между двумя перечислимыми числами

В качестве побочного вопроса, код ниже, чтобы сравнить каждый элемент работу, но должна быть более элегантным способом

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

Возможный дубликат http://stackoverflow.com/questions/876508/what-is-the-best-way-to-check-two-listt-lists-for-equality-in-c – Berryl

+0

Возможный дубликат [ Есть ли встроенный метод сравнения коллекций в C#?] (Http://stackoverflow.com/questions/43500/is-there-a-built-in-method-to-compare-collections-in-c) – nawfal

ответ

29

Посмотрите на Enumerable.SequenceEqual method.

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

В зависимости от типа данных, вы можете также необходимо использовать overloaded method, который принимает IEqualityComparer определить метод пользовательского сравнения.

10

.equals сравнивает ссылку из перечислимых, а не элементов в них содержатся.

Смежные вопросы