簡體   English   中英

C#:如何為以下類型的類實現GetHashCode?

[英]C# : How to implement GetHashCode for below type of class?

我有一個類似於以下的課程:

class Abc
{
     public string A {get;set;}
     public string B {get;set;}
}

等於的條件是,如果AB中的任何A匹配,則Abc類的兩個對象應該匹配。

public override bool Equals (Abc obj)
{
      if (obj.A == A || obj.B == B)
           return true;
      else return false;
}

任何人都可以讓我知道在這種情況下什么樣的GetHashCode函數將提供相等的值。

因為兩個AB字段可能具有相同的值,也可能具有不同的值。

實現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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM