У меня есть dead Простая модель просмотра, которая наследует от INotifyPropertyChanged
. После попытки создания некоторых автоматических тестов для этой модели представления я закончил переопределять Equals()
и GetHashCode()
. Мои тесты прошли, поэтому я был счастливым туристом.Почему переопределяет блок GetHashCode() INotifyPropertyChanged?
Однако теперь привязки данных 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 генерироваться для меня.
Почему переопределение GetHashCode()
прекратите мои привязки данных от набирания на моей модели модели изменений, несмотря на то, что я вызываю событие PropertyChanged
?
Являются ли GetHashCode() и Equals() действующими в тех же самых полях? Другими словами, если Equals() возвращает true, то HashCodes должны быть равны. Можете ли вы проверить это? –
Я предполагаю, что возвращаемый хэш-код является одним и тем же, поэтому .Net считает его одним и тем же объектом и не запускает событие с измененным свойством. –
Очень неясно. Какие привязки данных? ViewModels для WinForms? И почему тесты требуют GetHashcode? –