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

输出显示少量违反“重写可比较类型上的方法”规则,指出“‘Log’应该重写 Equals,因为它实现了 IComparable”。

这有两个问题:

  1. 我以为只需要实现 CompareTo 实施时 IComparable (MSDN本身也证实了这一点)
  2. 该类未实现 IComparableIComparable<T> 并将 CompareTo 实现为强类型。

所以 FxCop (1.36) 抛出了一个不稳定的问题,还是我的理解不正常……?

提前致谢。

有帮助吗?

解决方案

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

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

其他提示

我会覆盖等于,

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top