首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么'397'用于ReSharper GetHashCode覆盖?

在 ReSharper(重构工具)中,GetHashCode 方法被重写了以支持增量计算和避免重复。这种方法使用"397"作为哈希值。这个数字实际上没有特别意义,它是一个固定的数字。然而,它在这个场景中被选为代表 ReSharper 中使用的哈希算法的特点。

hashCode 方法的工作原理如下:

  1. 根据对象属性进行哈希计算。
  2. 使用"397"作为哈希值的基本计算方法。
  3. 根据哈希值实现冲突解决,如链地址法、二次探测法或 开放寻址法。

哈希值的作用:

  1. 确保对象在不同的哈希表中能够高效地处理,避免哈希碰撞和冲突。
  2. 减少哈希表大小,减少插入、查找、删除等操作所需的时间。

需要注意的是,"397" 用于 ReSharper GetHashCode 覆盖只是用于 ReSharper 重构工具中的一种固定的哈希算法实现方法。在实际场景中,可能需要使用更优或特定于应用程序或库的哈希算法。同时,为了确保代码的可测试性、正确性和可读性,建议始终为 hashCode 方法提供合适的实现,以便在应用程序中正确且高效地进行哈希计算。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

C# - 为值类型重定义相等性

为什么要为值类型重定义相等性 原因主要有以下几点: 值类型默认无法使用 == 操作符,除非对它进行重写 再就是性能原因,因为值类型默认的相等性比较会使用装箱和反射,所以性能很差 根据业务需求,其实际相等性的意义和默认的比较结果可能会不同...(如果你使用resharper或者Rider,那么实现该接口的时候它会自动把object的Equals和GetHashCode方法都重写了,并且自动完成了有意义的代码) ?...这个代码是resharper生成的。...所以如果重写了object.Equals()方法,那么就得重写object.GetHashCode()方法。 看一下resharper自动实现的代码: ?...之所以使用397这个数,可能因为397是一个足够大的质数,可以导致溢出,并混淆各位,之所以使用质数,是因为用质数相乘会得到比用其他任意数相乘更均匀的结果。 检验 ? ? 结果如预期,OK。

1.1K20

dotnet C# 基础 为什么 GetHashCode 推荐只取只读属性或字段做哈希值

在 C# 里面,所有的对象都继承 Object 类型,此类型有开放 GetHashCode 用于给开发者重写。...此 GetHashCode 方法推荐是在重写 Equals 方法时也同时进行重写,要求两个对象在 Equals 返回相等时,两个对象的 GetHashCode 返回值也相等。...如果在 GetHashCode 里面使用的字段或属性非只读,那么 ReSharper 将会警告你这是不安全的。...本文将来告诉大家为什么这是不安全的 在 dotnet 里面,大部分会用到 GetHashCode 的逻辑都在于哈希容器里面,如 Dictionary 字典等。...也许某个逻辑变更了这些非只读字段或属性的时候,影响了 GetHashCode 的返回值从而影响了哈希容器的行为 这就是为什么 ReSharper 警告不要在 GetHashCode 里面使用非只读字段或属性进行制作哈希值的原因

61120
  • GetHashCode重写指南(译文)

    我经常遇到重写GetHashCode需要注意事项的问题,因而,我在这里总结一下: GetHashCode的作用 设计仅用于在一个hash表中放置,索引一个对象。...为什么对象需要这样的一个方法 在类型系统中的每个对象都应该提供一个 GetType 的方法, 这是完全合理的。数据自描述能力是 CLR 类型系统的一个关键特性。...但是, 为什么每个对象都要求能在哈希表中插入自己的哈希值呢?要求每一个对象能够做到似乎是一个奇怪的事情。...Security issue:不要把GetHashCode用于其他用途 GetHashCode设计仅用于平衡hash表,不用用作其他用途,特别是: 没有给对象提供唯一键,碰撞几率非常高。...没有进行高度加密,因而不能用于签名或者密码的一部分 它不一定有校验的检错性能。 正确地处理所有这些事情是非常棘手的。

    1.1K60

    框架设计原则和规范(四)

    要在覆盖Equals方法同时覆盖GetHashCode方法 C. 考虑在覆盖Object.Equals方法的同时实现IEquatable接口 D.不要从Equals方法中抛出异常 E....b) 不要为可变的引用类型实现“值相等”语义 2) Object.GetHashCode A.覆盖了Object.Equals就要覆盖GetHashCode方法 B....确保任何两个对象,如果Object.Equals返回true,那么它们的GetHashCode方法返回值也相同 C....要竭尽所能的让GetHashCode方法产生随机分布的散列码 D.要确保无论怎么更改对象,GetHashCode都返回完全相同的值 E....避免在GetHashCode方法中抛出异常 3) Object.ToString A.要覆盖ToString方法——只要能返回既有用,又易于让人阅读的字符串 开发人员是查看返回的字符串的人员。

    1.5K40

    精:C# 泛型集合类List使用总结

    为什么选择使用List,而不是使用Array,或者ArryList 首先要说下数组的局限性 (1) 数组中元素是固定的:类型和数量都必须确定!...当然使用Linq中GoupBy + Select等方法还是可以做到去重的,但是这里说的并不是这些东西,而是直接使用Intersect、Except、Distinct、Union 那么为什么引用类型不能直接比较呢...因此要想比较,先把他的值点出来比较,可以只比较某一个值,也可以是全部 重写Equals() 和 GetHashCode() 为什么要重新呢,因为这些比较方法的内部就是调用者两个方法进行比较的,他们仅适用于值类型的比较...([DisallowNull] Person obj) { return obj.name.GetHashCode() + obj.age.GetHashCode();...() + obj.age.GetHashCode(); //return obj.name.GetHashCode() ^ obj.age.GetHashCode();// 两种写法都可以

    35830

    .NET Core开发实战(第5课:依赖注入:良好架构的起点)--学习笔记(上)

    05 | 依赖注入:良好架构的起点 为什么要使用依赖注入框架 借助依赖注入框架,我们可以轻松管理类之间的依赖,帮助我们在构建应用时遵循设计原则,确保代码的可维护性和可扩展性 ASP.NET Core 的整个架构中...services.AddControllers(); } 在 Controller 里面获取我们的服务 // FromServices 标注的作用是从容器里面获取我们的对象 // 每个对象获取两遍,用于对比每个生命周期获取的对象是什么样子的...()}"); Console.WriteLine($"singleton2:{singleton2.GetHashCode()}"); Console.WriteLine($"transient1...:{transient1.GetHashCode()}"); Console.WriteLine($"transient2:{transient2.GetHashCode()}"); Console.WriteLine...($"scoped1:{scoped1.GetHashCode()}"); Console.WriteLine($"scoped2:{scoped2.GetHashCode()}");

    49010

    VisualStudio中的单元测试

    VisualStuio中的测试资源管理器、CodeLens和ReSharper 上一篇文章重温了《单元测试的艺术》里提到的单元测试的技术及原则。...但CodeLens的图标常常刷不出来,一些第三方插件(如ReSharper)会更好用。 2....指示单元测试是否充分覆盖代码,并显示未被单元测试覆盖的代码。 Live Unit Testing 以图形方式实时描绘代码覆盖率,以便一眼就能看到每行代码覆盖的测试数,目和未被任何单元测试覆盖的行。...因此,存根类型不能用于静态方法、非虚方法、密封虚方法、密封类型中的方法,等等。 内部类型。...存根提供了可用于测试的接口和抽象方法的实现。 填充码无法检测接口和抽象方法,因为它们没有方法体。

    3.7K50

    VisualStudio 2019 新特性

    还在界面添加了清理代码的功能,如果用过 Resharper 的小伙伴就发现,在 Resharper 有两个格式化的方法,一个是 ctrl+alt+enter 格式,另一个是 clean file 格式,...在写代码的时候,如果打一个字要等半天是不是会砸键盘,在 VisualStudio 2019 可以设置插件可以拖慢的时间,如果超过时间就会杀线程,也就是这个功能可以看到 Resharper 停止工作 ?...其实还有很多我没有说到的细节,此时请大家看大佬们的视频 Visual Studio 2019 新特性大揭秘 特别感谢 应颜小伙伴告诉我 VisualStudio 写错了 walterlv 告诉我为什么优化的是...Blue 主题 Edi Wang 小伙伴让我撤回容易被小伙伴喷的图 如何下载安装离线的 VS 请看 VisualStudio 2019 如何离线下载 附激活码,激活码只用于尝试 VisualStudio...欢迎转载、使用、重新发布,但务必保留文章署名林德熙(包含链接: https://blog.lindexi.com ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。

    6.2K20
    领券