这个 GetHashCode 够好吗?

is this GetHashCode good enough?

我有这个class:

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。原因是这两个字段已经分别很好地散列了,并且由于这两个字段是不同类型的,所以不需要担心对称对碰撞(比如 XORing x 和 y 的 2D 点),所以唯一的碰撞情况是这 2 个字段都不同,但在异或后恰好得到相同的代码,这种情况很少见且可以接受。

是的,GetHashCode 没问题。如果你想避免对称性,应用一些简单的算术值之一,比如否定它。但是 GetHashCode 的每个用户无论如何都必须处理冲突,因此可能不需要。