C# 基于主键的GetHashCode()-安全吗?
类具有ID属性,该属性从SQL表的主键列获取值 如果我写作,这是一个好的做法吗C# 基于主键的GetHashCode()-安全吗?,c#,.net,hash,C#,.net,Hash,类具有ID属性,该属性从SQL表的主键列获取值 如果我写作,这是一个好的做法吗 public override int GetHashCode() { return this.ID + GetType().GetHashCode(); } 进我的班?(等于已经以相同的方式被覆盖。)为什么不能这样做 public override int GetHashCode() { return this.ID.GetHashCode(); } 我不确定您所做的是否是良好的实践,因为我不熟
public override int GetHashCode()
{
return this.ID + GetType().GetHashCode();
}
进我的班?(等于已经以相同的方式被覆盖。)为什么不能这样做
public override int GetHashCode() {
return this.ID.GetHashCode();
}
我不确定您所做的是否是良好的实践,因为我不熟悉如何将哈希代码分配给类型实例。hashcode的目的是以Int32形式对对象进行一致性表示。为什么特别希望在hashcode中包含该类型?如果在同一张地图中有很多不同类型的对象具有相同的ID,我可以看出这是多么有用,但通常我只使用
public override int GetHashCode()
{
return ID; // If ID is an int
// return ID.GetHashCode(); // otherwise
}
请注意,在继承层次结构中,相等的概念变得很棘手,这是选择组合而不是继承的另一个原因。你真的需要担心吗?如果您可以密封您的类,它将使平等性测试更容易,因为您只需要编写:
public override bool Equals(object obj)
{
MyType other = obj as other;
return other != null && other.ID == ID;
}
(您可能需要一个强类型Equals方法并实现IEquatable。)谢谢你们两位,+1感谢您的建议。