首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GetHashCode功能

GetHashCode功能
EN

Stack Overflow用户
提问于 2012-06-16 13:05:07
回答 3查看 148关注 0票数 0

为什么两个对象的哈希码不一样,尽管它们有相似的值。另一个最好的方法是找到对象之间的值相等,而不是读取每个属性的值,并检查其他属性?

代码语言:javascript
复制
                Person person = new Person();
                person.Name = "X";
                person.Age = 25;
                person.Zip = 600056;
                person.Sex = 'M';

                Person person1 = new Person();
                person1.Name = "X";
                person1.Age = 25;
                person1.Zip = 600056;
                person1.Sex = 'M';


                int hashCode1 = person1.Name.GetHashCode();
                int hashCode = person.Name.GetHashCode();

                // hashCode1 and hashCode values are same.

                if (person.GetHashCode() == person1.GetHashCode())
                {
                    // Condition is not satisfied
                }
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-06-16 13:44:51

在您的代码中,hashCode1 == hashCode是正确的,因为散列相同的字符串总是会得到相同的结果。然而,本质是不同的,因此您必须以适合您的业务逻辑的方式覆盖GetHashCode(),例如

代码语言:javascript
复制
    public override int GetHashCode()
    {
        return Name.GetHashCode() ^ Zip.GetHashCode() ^ Sex ^ Age;
    }

我建议你看看这个答案,GetHashCode Guidelines in C#

http://musingmarc.blogspot.com/2007/08/vtos-rtos-and-gethashcode-oh-my.html

票数 3
EN

Stack Overflow用户

发布于 2012-06-16 13:16:11

在您的示例中,这两个对象是相似的,但又不相同。它们是不同的实例,因此它们具有不同的哈希码。此外,person1 == person2和person1.Equals(person2)也是假的。

您可以覆盖此行为。如果您认为这两个对象相同(如果这些属性相等),则可以:

代码语言:javascript
复制
public override bool Equals(object other) {
    if(other == this) return true;

    var person = other as Person;
    if(person == null) return false;

    return person.Name == Name && person.Age == Age && person.Zip == Zip && person.Sex == Sex;

}

代码语言:javascript
复制
public override int GetHashCode() {
    //some logic to create the Hash Code based on the properties. i.e.
    return (Name + Age + Zip + Sex).GetHashCode(); // this is just a bad example!
}
票数 2
EN

Stack Overflow用户

发布于 2012-06-16 13:09:42

为什么两个对象的散列代码不相同,尽管它们具有相似的值

因为这是唯一识别它们的预期方式。AFAIK,大多数框架/库默认使用指针值。

,另一种最好的方法是找到对象之间的值相等,而不是读取每个属性,并检查其他属性?

这取决于是什么让他们“平等”,根据你的需要。基本上,它仍然是比较属性,但可能只是更有限。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11060981

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档