这是我的代码.为什么我的两个对象的哈希码不一样?
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();
}
Run Code Online (Sandbox Code Playgroud)
由于您没有覆盖GetHashCode,因此您将通过继承使用System.Object版本.
GetHashCode方法可以被派生类型覆盖.如果未覆盖GetHashCode,则通过调用基类的Object.GetHashCode方法来计算引用类型的哈希码,该方法基于对象的引用计算哈希码
换句话说,由于它们不是同一个对象实例,因此它们不会具有相同的哈希码.
要使它们具有相同的哈希码,您必须通过在Person类中重写它来实现自己的GetHashCode,例如simple;
public override int GetHashCode ()
{
return Name.GetHashCode () ^ Age.GetHashCode ();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
55 次 |
| 最近记录: |