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]); 我原以为“猫”会覆盖“狗”或某种错误,告诉我“钥匙已存在”但输出是
解决方法
GetHashCode只是第一个检查,用于确定不相等和可能的相等.之后,检查Equals.对于哪些对象默认为引用相等,而对于结构是成员比较.覆盖等于提供适当的实现(与哈希代码配对),它应该给出您期望的结果(重复键).
顺便说一句,IDE可能已经给你一个警告,GetHashCode和Equals应该一起处理…… (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |