代码检查:在 'GetHashCode()' 中引用了非只读类型成员
Microsoft documentation of the GetHashCode() method does not explicitly require that your override of this method returns a value that never changes during the object's lifetime. 具体来说,它指出:
对象的 GetHashCode 方法必须始终返回相同的哈希代码,只要对象状态未发生影响其 Equals 方法返回值的修改。
另一方面,它指出,至少当您的对象位于集合中时,哈希码不应更改:
您可以为不可变引用类型重写 GetHashCode。 通常,对于可变引用类型,您应仅在以下情况下重写 GetHashCode:
您可以从不可变字段计算哈希代码;或者
您可以确保当可变对象包含在依赖其哈希码的集合中时,其哈希码不会更改。
但为什么您首先需要重写 GetHashCode()? 通常,您会在对象将被用于 Hashtable 、作为字典中的键等情况下重写它,而很难预测对象何时会被添加到集合中以及会被保留多长时间。
综上所述,如果您想确保安全,请确保您重写的 GetHashCode() 在对象的生命周期内返回相同的值。 JetBrains Rider 将通过指出您在 GetHashCode() 实现中每个非只读字段或非仅获取属性来帮助您。 如果可能,JetBrains Rider 还会建议 快速修复 ,以使这些成员变为只读/仅获取。
最后修改日期: 2025年 9月 26日