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.

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top