2009-05-19 57 views
2

我目前正在調查使用FxCop與我們現有的項目之一,並得到一個奇怪的結果。FxCop和IComparable/IComparable <T>

輸出顯示少量違反'可比類型覆蓋方法'的規則,說明''Log'應該覆蓋Equals,因爲它實現了IComparable。「

有兩個問題與此:

  1. 我認爲這是唯一實現IComparable何時實現CompareTo必要(MSDN本身證明了這一點)
  2. 類沒有實現IComparableIComparable<T>和不impliment CompareTo作爲強類型。

因此,它FxCop(1.36)投擲搖擺不定或是我的理解是,這裏突如其來?..?

在此先感謝。

+1

提示,使用反引號來格式化語句中的代碼段,特別是爲了避免對泛型進行處理作爲一個HTML標記,從而消失。 – 2009-05-19 11:27:49

回答

2

FxCop是一個相當偏執的工具...在這種情況下,我想,它試圖警告你,你正在改變比較的邏輯,你不應該忘記在需要的時候改變相等的邏輯。你看,CompareTo方法有時返回0,這應該與使用Equals一致。

如果這不是真的你的情況,並且你確定你不需要任何重載(an example in MSDN表明你將需要重寫所有其他的equalty操作符)...然後只是抑制警告或禁用它。

2

我會重載Equals,

  • 只需撥打base.Equals在你的方法
  • 並添加註釋,解釋爲什麼上面是所有需要

這樣的FxCop是幸福的,下一個看着你的代碼的程序員也是如此。 (在極少數情況下,由於知識產權問題,您無法完成上述操作,但這些日子很少見。