質問

現在、既存のプロジェクトの 1 つで FxCop の使用を調査していますが、奇妙な結果が得られています。

出力には、「IComparable を実装しているため、'Log' は Equals をオーバーライドする必要がある」という「比較可能な型のメソッドをオーバーライドする」ルールに対する少数の違反が表示されます。

これには 2 つの問題があります。

  1. 実装するしかないと思った CompareTo 実装するとき IComparable (MSDN 自身もこれを確認しています)
  2. クラスは実装されていません IComparable しかし IComparable<T> そして、CompareTo を厳密に型指定したものとして暗黙的に示します。

つまり、FxCop (1.36) がぐらぐらしているということですか、それともここでの私の理解が狂っているのでしょうか...?

前もって感謝します。

役に立ちましたか?

解決

FxCop はかなり偏執的なツールです...この場合、比較ロジックを何らかの方法で変更しているので、必要に応じて等価ロジックを変更することを忘れないでください、と警告しようとしているのだと思います。ご存知のとおり、CompareTo メソッドは 0 を返すことがありますが、これは Equals の使用と一致するはずです。

実際にはこれが当てはまらず、オーバーロードは必要ないと確信している場合 (MSDN の例 他のすべての等価演算子もオーバーライドする必要があることを示しています)...その後、警告を抑制するか無効にするだけです。

他のヒント

Equals をオーバーライドします。

  • メソッド内でbase.Equalsを呼び出すだけです
  • 必要なのは上記だけである理由を説明するコメントを追加します

そうすれば、FxCop は満足し、コードを次に見るプログラマーも満足します。(ごくまれに、プロフォーランスの問題により上記のことができない場合がありますが、最近ではそのようなことはほとんどありません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top