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

前端之家收集整理的这篇文章主要介绍了c# – 为什么GetHashCode()很重要?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图了解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应该一起处理……

猜你在找的C#相关文章