2 votes

FxCop et IComparable/IComparable<T>

Je suis actuellement en train d'étudier l'utilisation de FxCop avec l'un de nos projets existants et je obtiens un résultat étrange.

La sortie affiche un petit nombre de violations de la règle "Remplacer les méthodes sur des types comparables" indiquant que "'Log' devrait remplacer Equals car il implémente IComparable."

Il y a deux problèmes avec cela:

  1. Je pensais qu'il était seulement nécessaire de mettre en œuvre CompareTo lors de la mise en œuvre de IComparable (MSDN le confirme lui-même)
  2. La classe n'implémente pas IComparable mais IComparable et implémente CompareTo de manière fortement typée.

Alors est-ce que FxCop (1.36) jette un coup de sang ou est-ce que c'est ma compréhension qui est décalée ici..?

Merci d'avance.

2voto

Max Galkin Points 10116

FxCop est un outil assez paranoïaque... Dans ce cas, je suppose, il essaie de vous avertir que vous modifiez d'une certaine manière la logique de comparaison et que vous ne devez pas oublier de changer la logique de l'égalité si nécessaire. Vous voyez, la méthode CompareTo retourne parfois 0, ce qui devrait être cohérent avec l'utilisation de Equals.

Si ce n'est pas vraiment votre cas, et que vous êtes sûr de ne pas avoir besoin de surcharge (un exemple dans MSDN montre que vous devrez également remplacer tous les autres opérateurs d'égalité)... alors simplement supprimez l'avertissement ou désactivez-le.

2voto

Ian Ringrose Points 19115

Je remplacerais Equals,

  • il suffit d'appeler base.Equals dans votre méthode
  • et ajoutez un commentaire expliquant pourquoi ce qui précède est tout ce qui est nécessaire

De cette façon, FxCop est content, tout comme le prochain programmeur qui examinera votre code. (Dans quelques rares cas, vous ne pouvez pas faire ce qui précède en raison de problèmes de performance, mais ceux-ci sont rares de nos jours.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X