コード検査: 'GetHashCode()' で参照される非読み取り専用型メンバー
GetHashCode() メソッドの Microsoft のドキュメントでは、このメソッドのオーバーライドによってオブジェクトの存続期間中に変更されない値が返されることが明示的に要求されていません。特に、言う:
オブジェクトの GetHashCode メソッドは、オブジェクトの Equals メソッドの戻り値を決定するオブジェクト状態への変更がない限り、常に同じハッシュコードを返す必要があります。
一方、オブジェクトがコレクション内にあるときは、少なくともハッシュコードは変更しないでください:
不変の参照型の GetHashCode をオーバーライドできます。一般に、可変参照型の場合、次の場合にのみ GetHashCode をオーバーライドする必要があります。
変更できないフィールドからハッシュコードを計算できます。または
オブジェクトがそのハッシュコードに依存するコレクションに含まれている間、可変オブジェクトのハッシュコードが変更されないようにすることができます。
しかし、そもそも GetHashCode() をオーバーライドする必要があるのはなぜですか? 通常、オブジェクトが Hashtable でディクショナリのキーとして使用される場合などに実行します。オブジェクトがコレクションに追加される時期とその期間を予測するのは非常に困難です。そこに保管した。
安全な側にいたい場合は、GetHashCode() のオーバーライドがオブジェクトの存続期間中に同じ値を返すことを確認してください。ReSharper は、GetHashCode() の実装で非読み取り専用フィールドまたは非取得専用プロパティを指すことで、ここでお手伝いします。可能な場合、ReSharper はクイックフィックスにこれらのメンバーを読み取り専用 / 取得専用にするよう提案します。
関連ページ:
コードインスペクション設定を構成する
設計時コードインスペクションを構成する:デフォルトでは、ReSharper は、サポートされている言語に対応するすべてのファイルで設計時コードインスペクションを有効にします。必要に応じて、無効にすることができます。設計時コードインスペクションが有効かどうかに関係なく、コードインスペクションは常に特定のスコープで実行できます。メインメニューからを選択するか、Alt+R O を押してから、左側のを選択します。設計時コードインスペクションを切り替えるには、コード分析を有効にするチェックボックスを使用し...
コードの問題のクイックフィックス
ReSharper を使用すると、設計時に検出されたほとんどのコード問題を即座に修復できます。ハイライトされたコードの問題でを押して、問題を解決したり最適以下のコードを改善したりするための適切な方法を選択するのと同じくらい簡単です。クイックフィックスの適用:クイックフィックスは、ハイライトされたコードの問題の左側にアクションインジケーターとして視覚的に表示されます。これらのインジケーターは、コードの問題にキャレットを置くと表示されます。次のインジケーターは、簡単な修正を意味します。エラー重大