0 c#
我有一个类似于以下的课程:
class Abc
{
public string A {get;set;}
public string B {get;set;}
}
Run Code Online (Sandbox Code Playgroud)
对于平等的标准是,如果任何的A或B匹配类的两个对象Abc应该匹配。
public override bool Equals (Abc obj)
{
if (obj.A == A || obj.B == B)
return true;
else return false;
}
Run Code Online (Sandbox Code Playgroud)
任何人都可以让我知道GetHashCode在这种情况下什么样的函数会给出相等的值。
因为两个A&B字段可能有也可能没有相同的值。
实现的唯一且唯一必须的要求GetHashCode是,当两个对象被视为相等(即Equals返回true)时,则它们的哈希码必须匹配。
在您的情况下,如果您有两个不同的对象,它们的x =(A1,B1)和y =(A2,B2),则它们的哈希码必须相同,因为它必须与z =(A1,B2)相同,因为x和z相等,所以y和z也相等。因此,的唯一有效实现GetHashCode是始终返回一个常数,例如0。
您可能会怀疑,因为GetHashCode仅返回一个常数的实现没有任何意义,这是事实。原因是您Equals也没有意义。您最大的问题是那Equals不是传递性的。x和z相等,z和y相等,但x和y不相等。这与您的预期相反。
| 归档时间: |
|
| 查看次数: |
44 次 |
| 最近记录: |