Tag: equality

匿名类型的平等

为什么Equals()和==的语义在用于比较匿名类型时有所不同? 为什么要比较值和其他比较参考? 它背后的原因是什么?

使用IEqualityComparer和Equals / GethashCode Override有什么区别?

当我使用字典有时我必须更改默认的等于意思,以便比较键。 我看到如果我覆盖键的类上的Equals和GetHashCode,或者我创建了一个实现IEqualityComparer的新类,我有相同的结果。 那么使用IEqualityComparer和Equals / GethashCode Override有什么区别? 两个例子: class Customer { public string name; public int age; public Customer(string n, int a) { this.age = a; this.name = n; } public override bool Equals(object obj) { Customer c = (Customer)obj; return this.name == c.name && this.age == c.age; } public override int GetHashCode() { return (this.name […]

两个枚举之间的平等

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

我应该使用字符串字段的串联作为哈希码吗?

我在C#中有一个Address类,如下所示: public class Address { public string StreetAddress { get; set; } public string RuralRoute { get; set; } public string City { get; set; } public string Province { get; set; } public string Country { get; set; } public string PostalCode { get; set; } } 我正在实现相等性,所以我需要覆盖哈希码。 起初我打算使用EJ的哈希码公式,但后来我想:这些都是字符串字段,我不能只使用StringBuilder连接它们并从该字符串返回哈希码吗? 那是: var str = new […]

在C#中检查两个List 列表是否相等的最佳方法是什么?

有很多方法可以做到这一点,但我觉得我错过了一个function或其他东西。 显然List == List将使用Object.Equals()并返回false 。 如果列表中的每个元素都相等并且出现在相反列表中的相同位置,那么我认为它们是相等的。 我正在使用值类型,但正确实现的Data对象应该以相同的方式工作(即我不是在寻找浅复制列表,只是内部每个对象的值相同)。 我尝试过搜索,也有类似的问题,但我的问题是每个元素都是按照确切的顺序相等。