类具有ID属性,并且此属性从SQL表的主键列获取值。
如果我写
,这是一个好习惯public override int GetHashCode()
{
return this.ID + GetType().GetHashCode();
}
进入我的班级? (等于已经以同样的方式覆盖了。)
答案 0 :(得分:5)
为什么你特别想在哈希码中包含类型?我可以看到,如果你在同一张地图中有很多不同类型的具有相同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 :(得分:2)
为什么你不能这样做
public override int GetHashCode() {
return this.ID.GetHashCode();
}
我不确定你做的是不是很好,因为我不熟悉如何将哈希码分配给类型实例。并且hashcode的目的是在Int32形式中具有对象的一致性表示。