首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么将'397‘用于ReSharper GetHashCode override?

为什么将'397‘用于ReSharper GetHashCode override?
EN

Stack Overflow用户
提问于 2008-09-19 23:20:46
回答 2查看 24.2K关注 0票数 157

像你们中的许多人一样,我使用ReSharper来加快开发过程。当您使用它来覆盖类的相等成员时,它为GetHashCode()生成的代码生成如下所示:

代码语言:javascript
复制
    public override int GetHashCode()
    {
        unchecked
        {
            int result = (Key != null ? Key.GetHashCode() : 0);
            result = (result * 397) ^ (EditableProperty != null ? EditableProperty.GetHashCode() : 0);
            result = (result * 397) ^ ObjectId;
            return result;
        }
    }

当然,我在那里有一些我自己的成员,但我想知道的是为什么是397?

  • 编辑:所以我的问题应该更好地表达为,除了397质数是质数之外,它还有什么“特殊”吗?
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2008-09-19 15:29:24

可能是因为397是一个足够大的素数,导致result变量溢出并在某种程度上混合了散列的位,从而提供了更好的散列码分布。397没有什么特别的区别于相同量级的其他素数。

票数 175
EN

Stack Overflow用户

发布于 2015-12-08 19:18:22

resharper使用的散列看起来像FNV散列的变体。FNV通常使用不同的素数来实现。有一个关于FNV here合适的素数选择的讨论。

票数 17
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/102742

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档