基本上,即使它们包含相同的属性值,GethashCode也会有所不同...那么为什么默认返回不同的哈希代码呢?
public class User
{
public Int32 Id { get; set; }
public String Username { get; set; }
}
User a = new User();
a.Id = 1;
a.Username = "Hello";
User b = new User();
b.Id = 1;
b.Username = "Hello";
Console.WriteLine("Hash A: {0} | Hash B: {1}", a.GetHashCode(), b.GetHashCode());
//Hash A: 37121646 | Hash B: 45592480 <-- these values change each time I rerun the app?
有没有更合适的方法,使我不会破坏Object.Equals对我的对象的工作方式,但仍然能够根据参数值进行自己的相等性检查?我问这个问题的原因是因为我有一个服务:SynchronizeUsers(),它会下载一组用户。我不想清除我的用户缓存,而是希望只更新需要更新的用户,删除同步指示删除的用户并添加新用户。但是,我不能在这些对象上只使用Object.Equals()。
a.GetHashCode() != b.GetHashCode()
,则不正常,除非编写该类的人故意将其设置为有缺陷,或该类具有重要成员会自动初始化为非固定值(例如DateTime.Now
)。请注意,这里不包括解释性内容。 - Jon