参见英文答案 >
Why is it important to override GetHashCode when Equals method is overridden?12个
我正在使用Entity Framework 5.在我的C#代码中,我想比较两个对象是否相等.如果没有,那么我想发布更新.
我正在使用Entity Framework 5.在我的C#代码中,我想比较两个对象是否相等.如果没有,那么我想发布更新.
我被告知我需要覆盖.Equals方法,然后是gethascode方法.我的课程看起来像这样:
public class Students { public int PersonId { get; set; } public string Name { get; set; } public int Age {get; set;} }
有人可以解释为什么我需要覆盖.Equals和.GetHashCode.也有人可以给我一个例子.特别是我不确定哈希码.请注意,我的PersonId是此类的唯一编号.
解决方法
出于多种原因你需要覆盖这两个原因.例如,HashCode用于字典和hashTable. equals用于您对数据结构(如Contains方法)进行的任何比较.一个例子:
public partial class myClass { public override bool Equals(object obj) { return base.Equals(obj); } public override int GetHashCode() { return base.GetHashCode(); } }
对于哈希码我会做的:
public int GetHashCode() { return PersonId.GetHashCode() ^ Name.GetHashCode() ^ Age.GetHashCode(); }