加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 为什么GetHashCode()很重要?

发布时间:2020-12-15 18:16:07 所属栏目:百科 来源:网络整理
导读:我试图了解object.GetHashCode()的用途.我读到集合使用它来唯一地标识密钥.但我想测试一下,结果不是我的预期. struct Animal{ public string Name { get; set; } public int Age { get; set; } public Animal(string name,int age) : this() { Name = name;
我试图了解object.GetHashCode()的用途.我读到集合使用它来唯一地标识密钥.但我想测试一下,结果不是我的预期.
struct Animal
{
    public string Name { get; set; }
    public int Age { get; set; }

    public Animal(string name,int age) : this()
    {
        Name = name;
        Age = age;
    }

    public override int GetHashCode()
    {
        return Age.GetHashCode();
    }
}

object doggy = new Animal("Dog",25);
object cat = new Animal("Cat",25);

Hashtable table = new Hashtable();
table.Add(doggy,"Dog");
table.Add(cat,"Cat");

Console.WriteLine("{0}",table[cat]);
Console.WriteLine("{0}",table[doggy]);

我原以为“猫”会覆盖“狗”或某种错误,告诉我“钥匙已存在”但输出是

“Cat”
“Dog”

解决方法

GetHashCode只是第一个检查,用于确定不相等和可能的相等.之后,检查Equals.对于哪些对象默认为引用相等,而对于结构是成员比较.覆盖等于提供适当的实现(与哈希代码配对),它应该给出您期望的结果(重复键).

顺便说一句,IDE可能已经给你一个警告,GetHashCode和Equals应该一起处理……

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读