51 votes

Lancer ArgumentNullException dans le constructeur?

Pour un constructeur avec un seul paramètre, est-il possible de créer une exception ArgumentNullException à l'intérieur du constructeur si le paramètre est null / empty? OU devrait-il être jeté dans la méthode qui utilise réellement l'argument? Merci.

55voto

Nix Points 22944

Oui, si elle est complètement essentiel de jeter l'exception. Vous ne devriez pas* lancer l'exception plus tard.

Toujours se souvenir de l' Échec des Premiers principes". Concept cours d'échouer maintenant, de sorte que vous ne perdez pas de temps à mettre au point ou d'une expérience inattendue de la fonctionnalité du système.

Sinon vous pouvez aussi jeter un ArgumentException pour "" et ArgumentNullException la valeur null. Dans les deux cas, assurez-vous de jeter un valide message d'Exception.


Toujours un bon article de référence pour la gestion des exceptions: la Bonne Gestion des exceptions des Règles de Pouce


Note de côté sur ce @Steve Michelotti a dit (parce que je suis un grand fan de CodeContracts)

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

sinon

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

17voto

Steve Michelotti Points 3767

Le lancer dans le constructeur convient: plusieurs classes du framework .NET le font. En outre, consultez les contrats de code pour cela.

4voto

Steve Danner Points 11604

D'après ce que cela ressemble, vous transmettez un paramètre au constructeur que la classe conservera pour pouvoir l'utiliser ultérieurement dans une autre méthode. Si vous n'utilisez pas réellement l'argument dans le constructeur, vous devriez probablement penser à déplacer l'argument pour qu'il devienne un paramètre de la méthode qui l'utilise réellement .

1voto

F.B. ten Kate Points 1119

Je mettrais la vérification dans la propriété que vous avez définie lorsque le constructeur est appelé ... De cette façon, l'exception serait levée dans tous les cas.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X