簡體   English   中英

GetHashCode返回不同​​的值

[英]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.

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