pen*_*ake 0 .net c# gethashcode
为了确保GetHashCode()方法为对象返回唯一值,我应该遵循哪些规则?
例如:
你甚至不应该瞄准为GetHashCode()每个对象返回一个独特的价值.这不是点的GetHashCode().
Eric Lippert有一篇关于哈希码的好文章,你应该仔细阅读.基本上你想要得到的东西总会为两个相等的对象返回相同的值(并且你需要通过相等来计算出你的意思)并且可能会为两个不相等的对象返回不同的值.
我个人倾向于使用这样的实现:
public override int GetHashCode()
{
int hash = 17;
hash = hash * 31 + field1.GetHashCode();
hash = hash * 31 + field2.GetHashCode();
hash = hash * 31 + field3.GetHashCode();
...
return hash;
}
Run Code Online (Sandbox Code Playgroud)
需要注意的事项:
如果您的字段可以为null,则需要在计算哈希值时检查该字段.例如:
hash = hash * 31 + (field2 == null ? 0 : field2.GetHashCode());
Run Code Online (Sandbox Code Playgroud)| 归档时间: |
|
| 查看次数: |
322 次 |
| 最近记录: |