我看到过这样的说法,如果你在一个类/对象上重写了Equals方法,那么你需要同时重写GetHashCode方法。
public class Person : IEquatable<Person>
{
public int PersonId { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public Person(int personId, string firstName, string lastName)
{
PersonId = personId;
FirstName = firstName;
LastName = lastName;
}
public bool Equals(Person obj)
{
Person p = obj as Person;
if (ReferenceEquals(null, p))
return false;
if (ReferenceEquals(this, p))
return true;
return Equals(p.FirstName, FirstName) &&
Equals(p.LastName, LastName);
}
}
现在假设有以下情况:
public static Dictionary<Person, Person> ObjDic= new Dictionary<Person, Person>();
public static Dictionary<int, Person> PKDic = new Dictionary<int, Person>();
不覆盖 GetHashCode 方法会影响上述两个字典吗?我的基本问题是,如何生成 GetHashCode?如果我仍然在 PKDic 中查找对象,我是否只能基于 PK 找到它。如果我想要覆盖 GetHashCode,该怎么做?