Si estás escribiendo una biblioteca BigInteger, a continuación, a pesar de todo debe lanzar una excepción adecuada DivideByZero
. Si estás escribiendo una biblioteca de carrito de la compra, entonces ... eh, probablemente no.
No puedo, por el momento, pensar en una buena razón para lanzar un NullReferenceException
. Si está creando una API con documentación que diga "El primer parámetro para HummingBirdFeeder.OpenSugarWaterDispenser(Dispenser dispenser, int flowRate)
es el dispensador de agua con azúcar que desea abrir". Y si alguien viene y le da un valor nulo a este método, entonces definitivamente deberías lanzar un ArgumentNullException
.
Permitir que NullReferenceException
fuera de su API simplemente sería pereza, porque eso está mal y se filtra parte de su funcionamiento interno.
editar para agregar:
Ahora que ha cambiado la pregunta para referirse a una ArgumentNullException
entonces la respuesta es fácil: sí, definitivamente debe tirar ese tipo de excepción en estas circunstancias:
- Usted están escribiendo un método público.
- Obtención de un valor nulo para el argumento es de alguna manera inapropiado (es decir, el método no tiene sentido sin ese argumento en particular).
- La documentación del método indica que los valores nulos no están permitidos.
En ese caso, lo primero que debe hacer su método es buscar un valor nulo y lanzar una excepción si se infringe la condición.
Si está escribiendo un método privado o interno, en la mayoría de los casos no tendrá que validar los parámetros en tiempo de ejecución en la compilación de lanzamiento. Puede asegurarse de que su propio código llame correctamente a su propio código. Una cosa que ayuda a crear esa seguridad es validar los parámetros de la versión de depuración por assersions agregó:
Debug.Assert(dispenser != null);
esta manera se puede verificar que el código está actuando correctamente y detectar cualquier error anterior sin ralentizar el código publicado con un montón de cheques inútiles y redundantes.
Los contratos de código pueden aliviar este problema. –
Nota: Las respuestas de Juhar y nobugz son muy buenas. – Armstrongest