![](/img/trans.png)
[英]Why does VS 2017 generate GetHashCode without an unchecked block
[英]Why does overriding GetHashCode() block INotifyPropertyChanged?
我有一个死掉的简单视图模型,该模型继承自INotifyPropertyChanged
。 在尝试为此视图模型创建一些自动化测试之后,我最终重写了Equals()
和GetHashCode()
。 我的考试通过了,所以我是个快乐的露营者。
但是,现在,当视图模型中的属性发生更改时,我的Windows Forms数据绑定没有反应。 如果我评论我的GetHashCode()
实现,除了我的测试,所有其他工作都按预期进行。
这是我的实现:
public override int GetHashCode()
{
unchecked
{
var hashCode = (_subject != null ? _subject.GetHashCode() : 0);
hashCode = (hashCode * 397) ^ (_message != null ? _message.GetHashCode() : 0);
hashCode = (hashCode * 397) ^
(_body != null ? _body.GetHashCode() : 0);
return hashCode;
}
}
这就是ReSharper为我生成的。
为什么尽管我调用了PropertyChanged
事件,但是重写GetHashCode()
阻止了我的数据绑定发生在视图模型更改中?
我总是尽量避免将代码添加到仅用于测试目的的生产代码中。 因此,由于出于测试目的而实现了Equals
和GetHashCode
,因此有可能实现IEqualityComparer<T>
并在单元测试中使用它来执行断言。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.