[英]GetHashCode returns different Values
我正在使用Linq-to-Sql來查詢SQL Server數據庫。 此查詢返回數據庫中實體的List。 我的基礎數據沒有變化。
收到列表后,我將在其上調用GetHashCode以測試是否相等。 奇怪的是,哈希值總是不同的。 為什么總會有所不同?
謝謝,
是不同的,因為它們是不同的對象引用。
如果要以這種方式運行,則需要根據對象數據為對象覆蓋Equals()和GetHashCode() 。
這里有一個關於如何操作的示例, 這里有一篇關於覆蓋GetHashCode()
方法的指南的博客文章。 希望能幫助到你。
class TwoDPoint : System.Object
{
public readonly int x, y;
public TwoDPoint(int x, int y)
{
this.x = x;
this.y = y;
}
public override bool Equals(System.Object obj)
{
if (obj == null) return false;
TwoDPoint p = obj as TwoDPoint;
if (p == null) return false;
// Return true if the fields match
return (x == p.x) && (y == p.y);
}
public override int GetHashCode()
{
return x ^ y;
}
}
正如Servy在他的評論中所說的那樣,請記住,即使重寫GetHashCode()
方法,您也無法使用該類型的數據進行無沖突哈希(只有),您只能降低沖突率。 您需要使用Equals()
來確保具有相同散列的對象真的相同
你重寫了GetHashCode()
嗎? 如果不是,則默認實現是根據列表的引用為您提供哈希碼。 它與列表的內容無關。
所以兩個不同的實例意味着兩個不同的哈希碼
要檢查列表相等性,請在實體類上重寫Equals
(和GetHashCode()
),並在列表中使用SequenceEqual
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.