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:

  1. Eu pensei que era apenas necessário implementar CompareTo ao implementar IComparable (si MSDN confirma isso)
  2. A classe não está implementando IComparable mas IComparable<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.

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top