FxCop и IComparable / IComparable <T> - PullRequest
2 голосов
/ 19 мая 2009

В настоящее время я изучаю использование FxCop с одним из наших существующих проектов и получаю странный результат.

В выходных данных отображается небольшое количество нарушений правила «Переопределить методы для сопоставимых типов», в которых говорится, что «Журнал должен переопределять Equals, поскольку он реализует IComparable».

Есть две проблемы с этим:

  1. Я подумал, что реализовать CompareTo нужно только при реализации IComparable (само MSDN подтверждает это)
  2. Класс не реализует IComparable, но IComparable<T> и подразумевает CompareTo как строго типизированный.

Так что это FxCop (1.36) выбрасывает шаткое или это мое понимание, что здесь не в порядке ..?

Заранее спасибо.

Ответы [ 2 ]

2 голосов
/ 17 февраля 2010

Я бы переопределил Equals,

  • просто вызовите base.Equals в вашем методе
  • и добавьте комментарий, объясняющий, почему выше все, что нужно

Таким образом, FxCop счастлив, как и следующий программист, который смотрит на ваш код. (В очень редких случаях вы не можете сделать это из-за проблем с проповедью, но в наши дни они редки.

2 голосов
/ 19 мая 2009

FxCop - довольно параноидальный инструмент ... В этом случае, я полагаю, он пытается предупредить вас, что вы как-то меняете логику сравнения, и вы не должны забывать об изменении логики равенства при необходимости. Видите ли, метод CompareTo иногда возвращает 0, что должно соответствовать использованию Equals.

Если это не совсем ваш случай, и вы уверены, что вам не нужна какая-либо перегрузка ( пример в MSDN показывает, что вам также потребуется переопределить все другие операторы равенства). .. затем просто подавить предупреждение или отключить его.

...