GetHashCode什么时候有用?
哈希码用在Hashtable和Dictionary中用于索引项,所以当你想用你自定义的类型作为Hashtable或Dictionary的Key值时,就可以考虑使用GetHashCode方法。
GetHashCode返回的哈希码是一样的情况下怎么办?
当GetHashCode返回的值相等时,会触发Equals进一步判断。
代码例子:
class test
{
public int x;
int y;
public test(int x, int y)
{
this.x = x;
this.y = y;
}
public override int GetHashCode()
{
Console.WriteLine("--进入GetHashCode");
return x + y;
}
public override bool Equals(object obj)
{
Console.WriteLine("--进入Equals");
return base.Equals(obj);
}
public override string ToString()
{
return x.ToString() + y.ToString();
}
}
static void Main(string[] args)
{
Hashtable ht = new Hashtable();
test cc = new test(2, 3);
test cc2 = new test(1, 4);
test cc3 = new test(3, 3);
Console.WriteLine("添加test1,哈希码为5");
ht.Add(cc, "test1");
Console.WriteLine("\r\n添加test1,哈希码为5");
ht.Add(cc2, "test2");
Console.WriteLine("\r\n添加test1,哈希码为6");
ht.Add(cc3, "test3");
Console.WriteLine("\r\n遍历哈希表");
foreach (var item in ht.Keys)
{
Console.WriteLine(item.ToString());
Console.WriteLine(ht[item]);
}
Console.Read();
}
结果: