2009-06-29 6 views
8

J'ai une classe avec deux constructeurs qui ressemblent à ceci:CA1062: ValidateArgumentsOfPublicMethods sur la co-constructeur appelle

public MyClass(SomeOtherClass source) : this(source, source.Name) { } 
public MyClass(SomeOtherClass source, string name) { /* ... */ } 

Quand je lance FxCop, il rend compte correctement une violation de CA1062: ValidateArgumentsOfPublicMethods, parce que si source est null dans la premier constructeur, il va lancer un NullReferenceException sur source.Name.

Est-il possible de corriger cet avertissement?

Je pourrais faire une méthode d'extension qui vérifie null et retourne son argument, mais ce serait moche. Aussi, si je comprends bien, cela ne résoudrait pas l'avertissement parce que FxCop ne réaliserait pas ce qu'il fait.

Répondre

10

Comme ça?

public MyClass(SomeOtherClass source) : this(source, source == null ? null : source.Name) { } 
public MyClass(SomeOtherClass source, string name) { /* ... */ } 
+0

Oui, c'est ça. Vous pouvez également utiliser n'importe quelle méthode statique. – Groo

0

Je dirais que la seule façon de corriger cet avertissement serait de l'éteindre. FxCop est un excellent outil mais parfois vous devez vous rappeler que c'est juste un outil et que vous pouvez faire des suggestions qui ne correspondent pas toujours à votre code.

Dans cet exemple, je dirais ignorer l'avertissement ou le désactiver si vous ne voulez pas le voir.

1

Il y a des moments légitimes pour désactiver les avertissements FxCop et cela pourrait très bien être un, mais vous pouvez corriger le problème soit par une expression ternaire qui vérifie nulle et lance une exception (ou substitue une valeur par défaut) ou un appel à une méthode statique qui vérifie null et lève l'exception appropriée.

Questions connexes