如何在C#结构中实现GetHashCode()
这个问题在这里已经有了答案:
总是后者。 前者是不够的,因为大多数位是0(你的数字很可能很小),而这些零位是最重要的位。 你会浪费很多散列码,从而导致更多的冲突。
另一种常见的做法是将每个项目乘以一个素数并依靠溢出:
return unchecked(FolderID.GetHashCode() * 23 * 23
+ SubItemKind.GetHashCode() * 23
+ SubItemID.GetHashCode());
编辑:更新为根据stakx的评论使用unchecked
的显式溢出支持。