我有这堂课:
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之后碰巧得到了相同的代码,这是罕见且可接受的。
答案 0 :(得分:0)
是的,GetHashCode很好。如果要避免对称性,请应用一些简单的算术值,例如否定它。但GetHashCode的每个用户无论如何都必须处理冲突,所以可能不需要它。