FxCop 和 IComparable/IComparable<T>
-
22-08-2019 - |
题
我目前正在调查 FxCop 在我们现有项目之一中的使用,并得到了一个奇怪的结果。
输出显示少量违反“重写可比较类型上的方法”规则,指出“‘Log’应该重写 Equals,因为它实现了 IComparable”。
这有两个问题:
- 我以为只需要实现
CompareTo
实施时IComparable
(MSDN本身也证实了这一点) - 该类未实现
IComparable
但IComparable<T>
并将 CompareTo 实现为强类型。
所以 FxCop (1.36) 抛出了一个不稳定的问题,还是我的理解不正常……?
提前致谢。
解决方案
FxCop 是一个相当偏执的工具......在这种情况下,我想,它试图警告您,您正在以某种方式更改比较逻辑,并且您不应该忘记在需要时更改相等逻辑。你看,CompareTo方法有时会返回0,这应该与使用Equals一致。
如果这不是你的情况,并且你确定你不需要任何重载(MSDN 中的一个例子 表明您还需要覆盖所有其他等于运算符)...然后只需抑制警告或禁用它即可。
其他提示
我会覆盖等于,
- 只需在您的方法中调用 base.Equals
- 并添加一条评论,解释为什么上述内容就是所需要的
这样,FxCop 就会很高兴,下一个查看您的代码的程序员也会很高兴。(在极少数情况下,由于原貌问题,您无法执行上述操作,但现在这种情况很少见。
不隶属于 StackOverflow