コード検査: オーバーライドされた GetHashCode は、'Object.GetHashCode()' を呼び出する
.NET では、GetHashCode() は組み込みクラスで使用され、コレクション内のオブジェクトを効率的に検索します。GetHashCode() をオーバーライドする場合、通常は、主にその等価性が基本 Object 等価性と同じでない場合に、特定のオブジェクトに適したより優れたハッシュ関数を提供することが目的です。
オーバーライドで base.GetHashCode() を呼び出すことはできますが、基本実装では派生クラスの特定の状態とメンバー変数を認識しないため、通常は役に立ちません。カスタムオブジェクトに意味のある、適切に分散されたハッシュコードが提供されない可能性があります。
GetHashCode() をオーバーライドした場合、オブジェクトの等価性セマンティクスを変更していることを示すシグナルなので、基本クラスの GetHashCode() に委譲しないでください。代わりに、オブジェクトの内部状態に基づいてハッシュコードを計算する必要があります。
また、.NET では非常に重要なルールとして、GetHashCode() をオーバーライドする場合は、Equals() もオーバーライドする必要があり、それらは一貫していなければならない、というものがあります。Equals() で 2 つのオブジェクトが同じであると判断された場合、GetHashCode() はそれらに対して同じハッシュコードを返す必要があります。
関連ページ:
コードインスペクション設定を構成する
設計時コードインスペクションを構成する:デフォルトでは、ReSharper は、サポートされている言語に対応するすべてのファイルで設計時コードインスペクションを有効にします。必要に応じて、無効にすることができます。設計時コードインスペクションが有効かどうかに関係なく、コードインスペクションは常に特定のスコープで実行できます。メインメニューからを選択するか、Alt+R O を押してから、左側のを選択します。設計時コードインスペクションを切り替えるには、コード分析を有効にするチェックボックスを使用し...
コード検査: [Flags] 属性でマークされていない列挙型に対するビット演算
列挙型が単一の個別の値のセットではなくビットフラグで表される選択肢の組み合わせとして使用されている場合は、[Flags] 属性で装飾することをお勧めします。このインスペクションは、属性を持たない列挙にビット論理演算子が適用されるケースを報告します。列挙が実際にビットフラグのセットを表す場合は、それに属性を適用することを検討してください。これにより、コードの読者がインテンションをよりよく理解できるようになります。また、やなどの一部のシステムメソッドが列挙を処理する方法も変わります。public en...