FxCop e IComparable / IComparable
-
22-08-2019 - |
Pergunta
Atualmente estou investigando o uso de FxCop com um de nossos projetos existentes e estou recebendo um resultado estranho.
A saída exibe um pequeno número de violações dos 'métodos de sobreposição de tipos comparáveis' regra afirmando que " 'Log' deve substituir Equals uma vez que implementa IComparable."
Há dois problemas com isso:
- Eu pensei que era apenas necessário implementar
CompareTo
ao implementarIComparable
(si MSDN confirma isso) - A classe não está implementando
IComparable
masIComparable<T>
e faz CompareTo impliment tão fortemente digitado.
Por isso, FxCop (1,36) jogando um instável ou é ele meus isso é compreensão fora de louco aqui ..?
Agradecemos antecipadamente.
Solução
FxCop é uma ferramenta bastante paranoidal ... Neste caso, suponho, ele está tentando avisá-lo, que você está mudando a lógica de comparação de alguma forma e você não deve esquecer alterar a lógica da igualdade, se necessário. Você vê, o método CompareTo às vezes retorna 0, o que deve ser consistente com o uso de Equals.
Se isso não é realmente o seu caso, e você tem certeza que você não precisa de nenhum dos sobrecarga ( um exemplo em programas MSDN que você vai precisar para substituir todos os outros operadores equalty também) ... então apenas suprimir o aviso ou desativá-lo.
Outras dicas
Gostaria de substituir Equals,
- apenas chamar base.Equals em seu método
- e adicionar um comentário explicando por que o acima é tudo que é necessário
Assim FxCop está feliz, e assim é o próximo programador que olha para o seu código. (Em alguns poucos casos, você não pode fazer o acima devido a problemas proforance, mas estes são raros nos dias de hoje.