FxCop と IComparable/IComparable<T>
-
22-08-2019 - |
質問
現在、既存のプロジェクトの 1 つで FxCop の使用を調査していますが、奇妙な結果が得られています。
出力には、「IComparable を実装しているため、'Log' は Equals をオーバーライドする必要がある」という「比較可能な型のメソッドをオーバーライドする」ルールに対する少数の違反が表示されます。
これには 2 つの問題があります。
- 実装するしかないと思った
CompareTo
実装するときIComparable
(MSDN 自身もこれを確認しています) - クラスは実装されていません
IComparable
しかしIComparable<T>
そして、CompareTo を厳密に型指定したものとして暗黙的に示します。
つまり、FxCop (1.36) がぐらぐらしているということですか、それともここでの私の理解が狂っているのでしょうか...?
前もって感謝します。
解決
FxCop はかなり偏執的なツールです...この場合、比較ロジックを何らかの方法で変更しているので、必要に応じて等価ロジックを変更することを忘れないでください、と警告しようとしているのだと思います。ご存知のとおり、CompareTo メソッドは 0 を返すことがありますが、これは Equals の使用と一致するはずです。
実際にはこれが当てはまらず、オーバーロードは必要ないと確信している場合 (MSDN の例 他のすべての等価演算子もオーバーライドする必要があることを示しています)...その後、警告を抑制するか無効にするだけです。
他のヒント
Equals をオーバーライドします。
- メソッド内でbase.Equalsを呼び出すだけです
- 必要なのは上記だけである理由を説明するコメントを追加します
そうすれば、FxCop は満足し、コードを次に見るプログラマーも満足します。(ごくまれに、プロフォーランスの問題により上記のことができない場合がありますが、最近ではそのようなことはほとんどありません。
所属していません StackOverflow