Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 基于主键的GetHashCode()-安全吗?_C#_.net_Hash - Fatal编程技术网

C# 基于主键的GetHashCode()-安全吗?

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(); } 我不确定您所做的是否是良好的实践,因为我不熟

类具有ID属性,该属性从SQL表的主键列获取值

如果我写作,这是一个好的做法吗

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感谢您的建议。