1

から継承する単純なビューモデルがありますINotifyPropertyChanged。このビュー モデルの自動テストをいくつか作成しようとした後、最終的に and をオーバーライド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 が私のために生成したものです。

イベントを呼び出しているにもかかわらず、オーバーライドGetHashCode()すると、データ バインディングがビュー モデルの変更を反映しなくなるのはなぜですか?PropertyChanged

4

1 に答える 1

1

私は常に、テストのみを目的として製品コードにコードを追加することは避けようとしています。したがって、テスト目的で実装Equalsしたので、単体テストでそれを実装して使用してアサーションを実行することは可能でしょうか。GetHashCodeIEqualityComparer<T>

于 2013-02-13T19:29:51.410 に答える