这是我的代码。为什么我的两个对象的哈希码不一样?
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
}
static void Main(string[] args)
{
Person p1 = new Person()
{
Age = 21,
Name = "Anna"
};
Person p2 = new Person()
{
Age = 21,
Name = "Anna"
};
int i = p1.GetHashCode();
int j = p2.GetHashCode();
Console.ReadLine();
}
答案 0 :(得分:7)
由于您未覆盖GetHashCode
,因此您将通过继承使用System.Object版本。
GetHashCode方法可以被派生类型覆盖。如果未覆盖GetHashCode,则通过调用基类的Object.GetHashCode方法计算引用类型的哈希码,根据对象的引用计算哈希码
换句话说,由于它们不是相同的对象实例,因此它们不会具有相同的哈希码。
要使它们具有相同的哈希码,您必须通过在Person类中重写它来实现自己的GetHashCode,例如simple;
public override int GetHashCode ()
{
return Name.GetHashCode () ^ Age.GetHashCode ();
}
答案 1 :(得分:2)
因为它们不是同一个对象,只是持有相同的数据。