我试图了解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]);
Run Code Online (Sandbox Code Playgroud)
我原以为"猫"会覆盖"狗"或某种错误,告诉我"钥匙已存在"但输出是
"猫狗"
Mar*_*ell 12
GetHashCode只是第一次检查,用于确定不平等和可能的平等.之后,检查Equals.对于哪些对象默认为引用相等,而对于结构是成员比较.覆盖Equals以提供适当的实现(与哈希代码配对),它应该给出您期望的结果(重复键).
顺便说一句,在IDE可能已经给你一个警告,GetHashCode并Equals应始终集中处理...
| 归档时间: |
|
| 查看次数: |
2270 次 |
| 最近记录: |