Равенство между двумя перечислимыми - PullRequest
22 голосов
/ 02 апреля 2010

У меня есть два перечислимых элемента с одинаковыми ссылочными элементами, и я удивляюсь, почему 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;

Ответы [ 2 ]

38 голосов
/ 02 апреля 2010

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

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

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

13 голосов
/ 02 апреля 2010

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

...