【发布时间】:2017-04-12 10:35:34
【问题描述】:
自 R# 2017.1.1 起,我在自动生成的 GetHashCode() 函数中收到警告。让我解释一下这个函数是如何创建的:
如果您覆盖类的Equals 函数,R# 建议您创建相等成员。如果您让 R# 生成这些相等成员,它也会覆盖 GetHashCode() 函数。然而,它在那里使用了我班级的所有属性。由于这些属性并非都是只读的,R# 告诉我应该将它们设为只读并显示警告。
所以我的问题是我是否应该将 GetHashCode() 函数留空(或删除带有警告的那些部分),或者我是否应该尝试将属性设置为只读以便 R# 不再警告我。
这是我的代码:
public override bool Equals(object obj) => obj is RamEntry && Equals((RamEntry) obj);
public override int GetHashCode()
{
unchecked
{
var hashCode = (Value != null ? Value.GetHashCode() : 0); //In those 5 lines the warnings are being displayed
hashCode = (hashCode * 397) ^ Unimportant.GetHashCode(); //-------------------------------------------------
hashCode = (hashCode * 397) ^ (Comment?.GetHashCode() ?? 0);//-------------------------------------------------
hashCode = (hashCode * 397) ^ (Address?.GetHashCode() ?? 0);//-------------------------------------------------
hashCode = (hashCode * 397) ^ LastUpdated.GetHashCode(); //-------------------------------------------------
return hashCode;
}
}
private bool Equals(RamEntry other)
=> string.Equals(Value, other.Value) && Unimportant == other.Unimportant &&
string.Equals(Comment, other.Comment) && string.Equals(Address, other.Address);
【问题讨论】:
标签: c# visual-studio refactoring resharper equals