web-dev-qa-db-fra.com

Lancer l'argumentation de l'argumentation dans le constructeur?

Pour un constructeur avec un seul paramètre, est-il correct de lancer une erreur argumentation à l'intérieur du constructeur si le paramètre est null/vide? Ou, devrait-il être lancé dans la méthode qui utilise réellement l'argument? Merci.

52
Ryan Peters

Oui, s'il est complètement essentiel, jetez l'exception. Vous ne devriez pas * jeter l'exception plus tard.

Rappelez-vous toujours le "échouer précoce" . Concept Échec de l'échec maintenant, vous ne perdez donc pas de temps de déboguer ou d'expérimenter une fonctionnalité de système inattendue.

Sinon, vous pouvez également lancer une erreur d'argument pour "" et l'argumentationception pour NULL. Dans les deux cas, assurez-vous de lancer un message d'exception valide.


Toujours un bon article de référence pour la gestion des exceptions: bonnes règles de gestion de l'exception


Note latérale sur ce que @steve Michelotti a déclaré (parce que je suis un énorme fan de codécontrices)

Contract.Requires<ArgumentNullException>(inputParemeter!= null, "inputparameter cannot be null");
Contract.Requires<ArgumentException>(inputParemeter!= "", "inputparameter cannot be empty string");

alternativement

Contract.Requires<ArgumentNullException>(!string.IsNullOrEmpty(inputParemeter), "inputparameter cannot be null or empty string");
53
Nix

Le jeter dans le constructeur est bon - il y a plusieurs classes dans le cadre .NET qui fait cela. De plus, vérifiez contrats de code pour cela.

17
Steve Michelotti

De ce qu'il ressemble, vous passez dans un paramètre dans le constructeur pour être maintenu par la classe à utiliser dans une autre méthode plus tard. Si vous n'utilisez pas réellement l'argument dans le constructeur, vous devez probablement penser à déplacer l'argument pour être un paramètre de la méthode qui est en fait l'utiliser.

4
Steve Danner

Je mettrais l'enregistrement dans la propriété que vous avez définie lorsque le constructeur est appelé ... de cette façon l'exception serait lancée dans tous les cas.

1
F.B. ten Kate