Me gustaría sugerirle que si no sabe qué hacer con una excepción, no la atrape. Con demasiada frecuencia, los codificadores detectan excepciones y simplemente las tragan enteras.
catch (Exception ex)
{
/* I don't know what to do.. *gulp!* */
}
Claramente esto no es bueno, porque las cosas malas están sucediendo, y no se están tomando medidas. ¡Solo atrape excepciones que sean procesables!
Dicho esto, el manejo elegante de errores es importante. No quiero que tu aplicación se cuelgue, ¿verdad? Puede encontrar que ELMAH es útil para aplicaciones web, y un controlador de excepción global es bastante fácil de configurar para las aplicaciones de escritorio WinForms o XAML.
Poniendo todo junto, puede encontrar esta estrategia útil: 1. atrapar excepciones específicas que usted sabe que podrían ocurrir (DivideByZeroException, SQLException, etc.) y alejarse de la Excepción genérica catch-all; 2. vuelva a subir la excepción después de manejarlo. p.ej.
catch (SQLException ex)
{
/* TODO: Log the error somewhere other than the database... */
throw; // Rethrow while preserving the stack trace.
}
¿Qué se puede hacer con una SQLException? ¿Desapareció la conexión de la base de datos? ¿Fue una mala consulta? Probablemente no desee agregar toda la lógica de manejo para eso, y además, ¿qué pasa si es algo que no esperaba? Así que solo maneje la excepción si puede, vuelva a subir a menos que esté seguro de que se resuelva, y trátelo elegantemente en un nivel global (por ejemplo, muestre un mensaje como "Algo salió mal, pero es posible que pueda continuar trabajando.Información detallada: '[ex.Mensaje]'. Abortar o Reintentar? ")
¡HTH!
John Saunders, gracias por la corrección.
parece que cree que es obligatorio agregar try/catch en todas partes. Quizás puedas compartir con nosotros lo que sabes sobre esta declaración para que podamos aclarar el concepto. –
obtener un frasco de vidrio y hacer algunos agujeros en la tapa ;-) –
Excepciones: Tengo que atrapar a todos! – CiscoIPPhone