2

我目前正在调查在我们现有的一个项目中使用 FxCop 并得到一个奇怪的结果。

输出显示了少量违反“可比较类型上的覆盖方法”规则的情况,说明“'Log' 应该覆盖 Equals,因为它实现了 IComparable。”

这有两个问题:

  1. 我以为只有在实现的CompareTo时候才需要实现IComparable(MSDN自己证实了这一点)
  2. 该类未实现IComparable,但IComparable<T>确实将 CompareTo 隐含为强类型。

所以 FxCop (1.36) 摇摇晃晃,还是我的理解在这里不正常..?

提前致谢。

4

2 回答 2

2

FxCop 是一个非常偏执的工具......在这种情况下,我想,它试图警告您,您正在以某种方式更改比较逻辑,如果需要,您不应该忘记更改相等逻辑。你看,CompareTo 方法有时会返回 0,这应该与使用 Equals 一致。

如果这不是您的实际情况,并且您确定不需要任何重载(MSDN 中的一个示例表明您还需要覆盖所有其他等式运算符)......然后只需抑制警告或禁用它。

于 2009-05-19T16:51:17.603 回答
2

我会覆盖 Equals,

  • 只需在您的方法中调用 base.Equals
  • 并添加一条评论,解释为什么只需要以上内容

这样 FxCop 会很高兴,下一个查看您的代码的程序员也会很高兴。(在极少数情况下,由于语言问题,您无法执行上述操作,但这些天很少见。

于 2010-02-17T08:58:35.683 回答