Domanda

Al momento sto indagando l'uso di FxCop con uno dei nostri progetti esistenti e sto ottenendo un risultato strano.

L'uscita visualizza un piccolo numero di violazioni delle 'metodi Override su tipi comparabili' regola affermando " 'Log' dovrebbe ignorare Uguale poiché implementa IComparable."

Ci sono due problemi con questo:

  1. ho pensato che era solo necessario implementare CompareTo nell'attuazione IComparable (MSDN si conferma questo)
  2. La classe non attua IComparable ma IComparable<T> e non impliment CompareTo come fortemente tipizzato.

Così FxCop (1.36) gettando un traballante o è la mia comprensione questo è fuori di colpo qui ..?

Grazie in anticipo.

È stato utile?

Soluzione

FxCop è uno strumento abbastanza paranoidal ... In questo caso, suppongo, che sta cercando di mettere in guardia voi, che state cambiando la logica del confronto in qualche modo e non si deve dimenticare che cambia la logica di uguaglianza, se necessario. Vedete, metodo CompareTo a volte restituisce 0, che dovrebbe essere coerente con l'utilizzo di Risultato.

Se questo non è davvero il vostro caso, e si è sicuri che non è necessario alcun del sovraccarico ( un esempio in MSDN dimostra che è necessario sovrascrivere tutti gli altri operatori equalty pure) ... poi basta sopprimere l'avviso o disattivarlo.

Altri suggerimenti

Vorrei ignorare Equals,

  • basta chiamare base.Equals nel metodo
  • e aggiungere un commento che spiega il motivo per cui quanto sopra è tutto ciò che è necessario

In questo modo FxCop è felice, e così è il programmatore successivo che guarda il tuo codice. (In pochissimi casi, non si può fare quanto sopra a causa di problemi proforance, ma questi sono rari in questi giorni.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top