2008-11-05 8 views
41

¿Hay alguna forma de averiguar qué excepciones pueden ser lanzadas por cualquier método en el código .NET? Idealmente, quiero ver qué podría arrojarse y elegir cuáles quiero manejar. Supongo que quiero la información que obtendrías de la cláusula throws en java.Averiguar qué excepciones un método puede lanzar en C#

La situación es que estoy haciendo una consulta LINQ en un documento XML desde la red y quieren saber lo que podría ir mal. Podría abrir el conjunto en reflector y echar un vistazo, pero pensé que podría haber una manera más fácil.

Respuesta

42

.NET no se han aplicado ("marcado") excepciones como Java. El intellisense podría mostrar esta información, si el desarrollador ha agregado un bloque /// <exception.../>, pero en última instancia, pueden ocurrir más excepciones de las esperadas (OutOfMemoryException, ThreadAbortException, TypeLoadException, etc. pueden ocurrir bastante impredeciblemente).

En general, usted debe tener una idea de lo que las cosas son propensos a ir mal, y cuáles en realidad se puede hacer algo útil sobre. En la mayoría de los casos, el comportamiento correcto es permitir que la excepción aumente (simplemente ejecute cualquier código "finally" para liberar recursos).

Eric Lippert tiene un buen blog sobre este tema here.

+0

Gracias. El enlace al blog de Eric Lippert fue realmente útil también. :) – Helephant

0

Mientras usted está utilizando las clases de BCL, todos ellos son completamente documentado y, por tanto, IntelliSense muestra ninguna excepción de un método puede lanzar. Aparte de eso (y leer los documentos), no hay forma, creo.

+0

Hay muchas excepciones que no están documentadas porque no se pueden predecir; e incluso entonces no puedes * completamente * confiar en que el intellisense esté actualizado. Por cierto, el voto negativo no era mío. –

+1

"Muchas excepciones", como TypeLoadException que menciona, pueden provenir de CLR, técnicamente hablando, o incluso de la CPU. No creo que nadie esté interesado en anticiparlos y atraparlos. El SDK de .NET, por otro lado, enumera las excepciones que pueden arrojarse con los métodos de BCL ... – liggett78

+1

y esos son normalmente lo que realmente le interesa. – liggett78

8

creo que Exception hunter puede proporcionar esta información sin embargo, cuesta dinero ...

+2

Este software ha sido descontinuado. – froeschli

+3

Esto no tiene comparación con Exception Hunter pero si está buscando una forma gratuita de hacerlo, escribí una forma rápida de obtener esta información aquí: https://github.com/stevesheldon/ExceptionReflector. Siéntase libre de tenedor/actualizar si no satisface sus necesidades. –

1

Después de leer otro artículo sobre esto en stackoverflow, he construido en la parte superior de esa otra respuesta a escribir una herramienta para hacer esto, se puede obtener el código fuente de GitHub aquí:

Exception Reflector

también se puede leer más aquí:

http://steves-rv-travels.com/archives/167

+0

Intenté esto en una biblioteca que escribí que llama a System.Net.Http, y no veo esas excepciones en la lista. ¿Es porque es una llamada asincrónica y está envuelto en una excepción agregada? También estoy usando .NET 4.5, tal vez ese sea el culpable. – aoetalks

Cuestiones relacionadas