ti-enxame.com

Jogando ArgumentNullException no construtor?

Para um construtor com um único parâmetro, é OK lançar uma ArgumentNullException dentro do construtor se o parâmetro for nulo/vazio? OU, ele deve ser lançado no método que realmente usa o argumento? Obrigado.

52
Ryan Peters

Sim, se for completamente essencial, lance a exceção. Você não deve * lançar a exceção mais tarde.

Lembre-se sempre do "Fail Early Principle" . O conceito está falhando agora, para que você não perca tempo na depuração ou experimente funcionalidades inesperadas do sistema.

Como alternativa, você também pode lançar ArgumentException para "" e ArgumentNullException para null. Em ambos os casos, certifique-se de lançar uma mensagem de exceção válida.


Sempre um bom artigo de referência para gerenciar exceções: Boas regras de gerenciamento de exceções


Nota lateral sobre o que Steve Michelotti disse (porque eu sou um grande fã do CodeContracts)

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

alternativamente

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

Jogá-lo no construtor é bom - existem várias classes na estrutura .NET que fazem isso. Além disso, confira contratos de código para isso.

17
Steve Michelotti

Pelo que parece, você passa um parâmetro para o construtor a ser mantido pela classe para uso em algum outro método posteriormente. Se você não está realmente usando o argumento no construtor, provavelmente deve pensar em mover o argumento para ser um parâmetro do método que está na verdade usando-o.

4
Steve Danner

Eu colocaria a verificação na propriedade que você definiu quando o construtor é chamado ... Dessa forma, a exceção seria lançada em todos os casos.

1
F.B. ten Kate