FxCop和IComparable / IComparable <t> </t>

时间:2009-05-19 11:22:15

标签: fxcop icomparable icomparablet

我目前正在研究将FxCop用于我们现有的一个项目,并得到一个奇怪的结果。

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

这有两个问题:

  1. 我认为只有在实施CompareTo时才需要实施IComparable(MSDN本身确认了这一点)
  2. 该课程没有实施IComparable,而是IComparable<T>,并且确实将CompareTo称为强类型。
  3. 所以它FxCop(1.36)摇摇晃晃地说,或者我的理解是不是在这里发生了什么......?

    提前致谢。

2 个答案:

答案 0 :(得分:2)

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

如果这不是你的情况,并且你确定你不需要任何重载(an example in MSDN节目,你将需要覆盖所有其他的等号运算符)...然后只是压抑警告或禁用它。

答案 1 :(得分:2)

我会覆盖Equals,

  • 只需在您的方法中调用base.Equals
  • 并添加评论,解释上述原因所需的原因

这样FxCop很高兴,下一个查看代码的程序员也是如此。 (在极少数情况下,由于亵渎问题,你无法做到这一点,但这些日子很少见。