CA1062: ValidateArgumentsOfPublicMethods sur les appels co-constructeur
-
21-08-2019 - |
Question
J'ai une classe avec deux constructeurs qui ressemblent à ceci:
public MyClass(SomeOtherClass source) : this(source, source.Name) { }
public MyClass(SomeOtherClass source, string name) { /* ... */ }
Quand je lance FxCop, il signale correctement une violation de CA1062: ValidateArgumentsOfPublicMethods , parce que si est source
dans le premier null
constructeur, il va jeter un sur NullReferenceException
source.Name
.
Yat-il un moyen de résoudre cet avertissement?
Je pourrais faire une méthode d'extension qui vérifie nulle et retourne son argument, mais ce serait laid. En outre, comme je comprends, cela ne résoudrait pas l'avertissement parce FxCop ne réaliserait pas ce qu'il fait.
La solution
Comme cela?
public MyClass(SomeOtherClass source) : this(source, source == null ? null : source.Name) { }
public MyClass(SomeOtherClass source, string name) { /* ... */ }
Autres conseils
Il y a des fois 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 un procédé statique qui vérifie nulle et lève l'exception appropriée.
Étant donné que cette question a été posée il y a quelque temps, je veux juste noter les caractéristiques plus tard en C #, vous pouvez maintenant utiliser ceci:
public MyClass(SomeOtherClass source) : this(source, source?.Name) { }
Je dirais que la seule façon de résoudre cet avertissement serait de désactiver. FxCop est un excellent outil, mais parfois vous avez besoin de se rappeler qu'il est juste un outil et peut faire des suggestions qui ne sont pas toujours d'ajustement à votre code.
Dans cet exemple, je dirais ignorer l'avertissement ou le désactiver si vous ne voulez pas le voir.