这个GetHashCode足够好吗?

时间:2015-10-09 07:12:53

标签: hashcode gethashcode

我有这堂课:

public class RelationInfo
{
    public FieldInfo Field;
    public int Index;
    public override int GetHashCode()
    { return Field.GetHashCode() ^ int.GetHashCode(); }
    public override bool Equals(object obj)
    { return Field == ((RelationInfo)obj).Field && Index == ((RelationInfo)obj).Index; }
}

GetHashCode是否定义良好?我已经阅读了类似FNV的算法,但最后我来到简单的XOR。原因是2个字段已经分别进行了很好的散列,并且由于2个字段的类型不同,因此无需担心对称对碰撞(如2D点的XORing x和y),因此唯一的碰撞情况是这两个字段都是不同的,但在XORing之后碰巧得到了相同的代码,这是罕见且可接受的。

1 个答案:

答案 0 :(得分:0)

是的,GetHashCode很好。如果要避免对称性,请应用一些简单的算术值,例如否定它。但GetHashCode的每个用户无论如何都必须处理冲突,所以可能不需要它。