C#:如何为以下类型的类实现GetHashCode?

0 c#

我有一个类似于以下的课程:

class Abc
{
     public string A {get;set;}
     public string B {get;set;}
}
Run Code Online (Sandbox Code Playgroud)

对于平等的标准是,如果任何的AB匹配类的两个对象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在这种情况下什么样的函数会给出相等的值。

因为两个AB字段可能有也可能没有相同的值。

Geo*_*org 5

实现的唯一且唯一必须的要求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不相等。这与您的预期相反。