2011-10-19 4 views
6

Estoy limpiando algún código heredado y he encontrado métodos que lanzan explícitamente un NullReferenceException (por ejemplo, al verificar si algunas propiedades de una clase son nulas o verificar la configuración). Como CLR arroja este tipo de excepción en el caso de una referencia nula, esta parece ser una opción muy pobre para una excepción para que una aplicación lance explícitamente.Razones para lanzar una NullReferenceException explícitamente?

Mi pregunta es - ¿Hay alguna razones por las cuales un NullReferenceException sería una buena opción para una excepción para arrojar explícitamente desde el código?

+0

probablemente no, comprobamos los parámetros y algunas veces lanzamos ArgumentNullException pero esto es bueno para argumentos y parámetros, para propiedades no seguras ... –

Respuesta

9

La documentación para NullReferenceException implica que no se debe tirar desde una aplicación:

Tenga en cuenta que las aplicaciones lanzan la ArgumentNullException excepción y no la excepción NullReferenceException discutido aquí.

Y estoy seguro de que he visto una guía en otro lugar (no puedo encontrar ninguna en este momento) que evite arrojar tipos de excepción que arroja el tiempo de ejecución (aunque estoy a punto de vincular a algo que muestra tiempo de ejecución lanzar una excepción "aplicación")


Si usted está comprobando las propiedades dentro de un método, antes de continuar, parece que es posible que desee reemplazarlos con InvalidOperationException:

InvalidOperationException utilizado en los casos en que la falta de invocación de un método se debe a razones distintas de los argumentos no válidos.

Al estar en el estado incorrecto para el método, la llamada suena como si se ajusta a esta definición.

0

Puedo invisionar los senarios donde tendría sentido arrojarlos explícitamente. El primero que se me ocurre es verificar las propiedades antes de que se haga mucho otro procesamiento antes de que el CLR encuentre la excepción.

+0

¿No debería usarse ArgumentNullException para estos escenarios? – DaveHogan

1

Supongo que si el código no se verificara, obtendrías una NullReferenceException (NRE) de cualquier forma, por lo que no. Sin embargo, no veo ningún problema con tener un mensaje de aplicación que explique mejor el mecanismo de llamada de la función particular con un tipo de excepción interna de NRE o ArgumentExecption, ya que es el problema subyacente que está causando el problema.

2

MSDN dice esto:

Tenga en cuenta que las aplicaciones emitir la excepción ArgumentNullException más que la excepción NullReferenceException discutido aquí.

Así que la respuesta a su pregunta es probablemente "no".

5

No, no hay ninguna razón para lanzar un NullReferenceException.

Siempre tiene algunos más información sobre el motivo del error, por lo que debe lanzar una excepción que transmita esa información.

Si, por ejemplo, obtiene una referencia nula como argumento donde no está permitido, en su lugar arrojaría un ArgumentException o ArgumentNullException.

2

No, NullReferenceException solo debe ser lanzado por el propio marco. ArgumentNullException o InvalidOperationException son alternativas válidas.

+1

No debería usar [NotSupportedException] (http://msdn.microsoft.com/en-us/library/system.notsupportedexception.aspx) en este caso: "Para escenarios en los que a veces es posible que el objeto realice el pedido operación, y el estado del objeto determina si la operación se puede realizar, consulte InvalidOperationException. –

+0

actualizado ........ – devdigital

Cuestiones relacionadas