两个枚举之间的平等

时间:2010-04-02 04:16:28

标签: c# linq ienumerable equality

我有两个完全相同的参考元素的枚举,并想知道为什么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 个答案:

答案 0 :(得分:37)

查看Enumerable.SequenceEqual method

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

根据数据类型的不同,您可能还需要使用接受IEqualityComparer的{​​{3}}来定义自定义比较方法。

答案 1 :(得分:13)

.Equals正在比较 enumerables 的引用,而不是它们包含的元素