为什么重写GetHashCode()会阻止INotifyPropertyChanged
本文关键字:INotifyPropertyChanged 重写 GetHashCode 为什么 | 更新日期: 2023-09-27 17:59:24
我有一个继承自INotifyPropertyChanged
的死简单视图模型。在尝试为此视图模型创建一些自动化测试之后,我最终覆盖了Equals()
和GetHashCode()
。我的测试通过了,所以我是一个快乐的露营者。
但是,现在我的Windows窗体数据绑定不会对视图模型中的属性更改做出反应。如果我评论我的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>
并在单元测试中使用它来执行断言。