我目前正在研究将FxCop用于我们现有的一个项目,并得到一个奇怪的结果。
输出显示少量违反'可比较类型的覆盖方法'的规则,声明“'Log'应该覆盖Equals,因为它实现了IComparable。”
这有两个问题:
CompareTo
时才需要实施IComparable
(MSDN本身确认了这一点)IComparable
,而是IComparable<T>
,并且确实将CompareTo称为强类型。所以它FxCop(1.36)摇摇晃晃地说,或者我的理解是不是在这里发生了什么......?
提前致谢。
答案 0 :(得分:2)
FxCop是一个非常偏执的工具......在这种情况下,我想,它试图警告你,你正在以某种方式改变比较逻辑,你不应该忘记在需要时改变相等逻辑。你看,CompareTo方法有时返回0,这应该与使用Equals一致。
如果这不是你的情况,并且你确定你不需要任何重载(an example in MSDN节目,你将需要覆盖所有其他的等号运算符)...然后只是压抑警告或禁用它。
答案 1 :(得分:2)
我会覆盖Equals,
这样FxCop很高兴,下一个查看代码的程序员也是如此。 (在极少数情况下,由于亵渎问题,你无法做到这一点,但这些日子很少见。