2010-08-06 19 views
2

Lors d'une mission continue de nettoyage de la base de code dont j'ai hérité via stylecop et fxcop, l'un des avertissements de fxcop était CA1801: Paramètre ' valeur 'de Something.MyProperty.set (chaîne) n'est jamais utilisée. Supprimez le paramètre ou utilisez-le dans le corps de la méthode.Avertissement FXCop CA1801: "Parameter is never used ..." sur une propriété supprimée héritée substituée

Le code qu'il se plaint est:

public class Something : ISomeInterface 
    public new string MyProperty 
    { 
     get 
     { 
      throw new InvalidOperationException("MyProperty is not implemented."); 
     } 

     set 
     { 
      throw new InvalidOperationException("MyProperty is not implemented."); 
     } 
    } 

Cette propriété est définie dans l'interface, mais dans ce cas n'est pas nécessaire dans la classe dérivée - En dehors de l'utilisation un peu douteuse InvalidOperationException au lieu de NotImplementedException, ce que je crois est commun, je me demande si je devrais juste exclure l'avertissement dans FXCop avec une note expliquant pourquoi?

Je ne vois pas ce que je pourrais faire d'autre en termes de meilleure pratique, pour empêcher l'avertissement dans FXCop, autre que refactoriser cette propriété particulière dans une deuxième interface, puis mettre à jour toutes les autres classes qui utilisent cette interface? Je pense que je viens de répondre à ma propre question? : D

+0

En fait, c'est NotSupportedException qui devrait être utilisé dans ce cas. NotImplementedException est destiné à signaler que le développeur n'a pas encore terminé le code d'une méthode. Voir http://blogs.msdn.com/b/brada/archive/2004/07/29/201354.aspx pour plus de détails. –

+0

Oui, vous avez bien raison là-bas, merci pour cela! –

Répondre

2

Je crois que c'est à cause du "nouveau" mot-clé que vous recevez cet avertissement. Essayez en remplaçant en supprimant le nouveau avec override et voir si l'avertissement disparaît.

public class Something : ISomeInterface 
    public string MyProperty 

BTW, je recommande d'utiliser NotImplementedException au lieu de InvalidOperationException aussi bien.

+0

En fait, le changer pour passer outre a semblé le résoudre, mais pas entièrement sûr que je comprenne pourquoi! : D –

+0

De plus, cela nécessitait que la propriété de base soit définie virtuelle afin de pouvoir la surcharger. –

+0

@Andrew, Ahh .. désolé j'ai raté ça. Puisque c'est une interface, vous pouvez simplement en retirer de nouvelles. New va créer une autre signature de méthode et ne pas implémenter l'interface. –