Après analyse de code d'exécution dans VS2010 Beta (FXCop pour les versions précédentes), je reçois l'avertissement suivant:
méthode visible de l'extérieur 'Identity.Ididentity (Windowssidity)', Valider le paramètre 'Windowsidity' avant de l'utiliser. p> blockQuote>
Le constructeur est: p>
xxx pré> pour une classe définie comme: p>
xxx pré> Ma question est Comment puis-je valider le paramètre Windowsity? Dois-je le valider dans le constructeur et lancer une exception ou y a-t-il un meilleur moyen d'appeler cela? P> p>
5 Réponses :
Je pense que FXCOP rapporte cette erreur ici car il pense que vous pouvez rencontrer une nullreferenceExceptionException en accédant à Un moyen d'ajouter une vérification de validation pour NULL serait Pour ajouter une fonction privée statique à votre classe qui peut vérifier le paramètre Windowsity pour NULL et prendre les mesures appropriées: P> windowidentity code> lorsque vous appelez le constructeur de la classe de base.
public Identity(WindowsIdentity windowsIdentity)
: base( windowsIdentity == null ? null : windowsIdentity.Token )
{
init();
}
Une erreur d'argumentation est une inadéquation de contrat. Une nullreferenceException est un bogue d'exécution.
Il se plaint car si vous passez NULL comme vitrysidité, alors lorsque le constructeur chaîne à la classe de base, il lancera une exception de référence nulle.
Le meilleur moyen de gérer cela dépend de votre conception.
Vous pouvez le vérifier pour NULL comme ceci: p> ou vous pouvez créer un autre constructeur dans le constructeur de classe de base qui prend une fenêtre de fabrication de paramètre et que ce constructeur fait cette partie de la validation. Fondamentalement, il y a des tonnes de façons de faire face à cela, utilisez simplement ce qui fonctionne mieux dans votre situation. P> P>
Vous pouvez le valider dans une méthode statique:
public Identity(WindowsIdentity windowsIdentity) : base(GetToken(windowsIdentity)) { init(); } static Token GetToken(WindowsIdentity ident) { if(ident == null) throw new ArgumentNullException("ident"); return ident.Token; }
FX COP vous dit que le paramètre ne peut pas être nul, donc si vous en avez vraiment besoin, vous devez en valoriser en quelque sorte. Puisque vous l'utilisez dans le constructeur, vous voulez probablement une valeur différente de NULL, vous devez donc la valider là-bas pour que FX COP, arrêtez-vous. P>
Si vous avez besoin d'un constructeur avec NULL, vous devez avoir un autre constructeur sans paramètres. P>
Si vous n'utilisez pas ou que vous la validez à un autre point, vous pouvez ignorer l'alerte. P>
Pour éviter le problème avec FXCop, vous devriez lancer ArgumentNlexception. P>
à partir de C # 6.0 Vous pouvez utiliser Opérateur null-coalescent combiné avec le Opérateur null-conditionnel comme ceci:
public Identity(WindowsIdentity winIdentity) : base(winIdentity?.Token ?? throw new ArgumentNullException(nameof(winIdentity))) { init(); }