![](/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.