繁体   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