gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 21:00:00 24 4
gpt4 key购买 nike

我想了解 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]);

我本以为“猫”会覆盖“狗”或某种错误告诉我“ key 已经存在”但输出是

"Cat" "Dog"

最佳答案

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

顺便说一句,IDE 可能已经向您发出警告,即 GetHashCodeEquals 应始终一起处理...

关于c# - 为什么 GetHashCode() 很重要?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3661801/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com