如何在C#结构中实现GetHashCode()

这个问题在这里已经有了答案:

  • 什么是重写的System.Object.GetHashCode的最佳算法? 17个答案

  • 总是后者。 前者是不够的,因为大多数位是0(你的数字很可能很小),而这些零位是最重要的位。 你会浪费很多散列码,从而导致更多的冲突。

    另一种常见的做法是将每个项目乘以一个素数并依靠溢出:

    return unchecked(FolderID.GetHashCode() * 23 * 23 
                     + SubItemKind.GetHashCode() * 23 
                     + SubItemID.GetHashCode());
    

    编辑:更新为根据stakx的评论使用unchecked的显式溢出支持。

    链接地址: http://www.djcxy.com/p/39771.html

    上一篇: How to implement GetHashCode() in a C# struct

    下一篇: C# GetHashCode with three Int16 values?