[英]C# : How to implement GetHashCode for below type of class?
我有一個類似於以下的課程:
class Abc
{
public string A {get;set;}
public string B {get;set;}
}
等於的條件是,如果A
或B
中的任何A
匹配,則Abc
類的兩個對象應該匹配。
public override bool Equals (Abc obj)
{
if (obj.A == A || obj.B == B)
return true;
else return false;
}
任何人都可以讓我知道在這種情況下什么樣的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不相等。 這與您的預期相反。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.