//segundo constructor que se ejecuta. public MiClaseEjemplo(int num) { try { MiClaseEjemplo.MetodoStatic(); } catch (Exception excepcion_1) { //esta linea lanza una nueva excepcion donde adjunto la excepcion para que quede guardada en la // propiedad InnerException del proximo catch. throw new MiExcepcionPropia("fallo en MiClaseEjemplo con parametro entero", excepcion_1); } }
static void Main(string[] args) { try { MiClaseEjemplo miClase = new MiClaseEjemplo(); } catch (Exception ex) { // Va a mostrar el mensaje lanzado en el metodo anterior // Es decir, "Fallo en MiClaseEjemplo". Console.WriteLine(ex.Message); // Para poder acceder a las excepciones que vienen por Inner, hay que llamar a la misma. // Aca estariamos mostrando "fallo en MiClaseEjemplo con parametro entero" Console.WriteLine(ex.InnerException.Message); // Para mostrar el error original, es decir, el "intento dividir por 0", lo hacemos 1 vez mas Console.WriteLine(ex.InnerException.InnerException.Message); // La forma correcta seria recorrer las Inner exception. Una forma seria con un while o un doWhile Console.Clear(); Console.WriteLine(ex.Message); while (ex.InnerException != null) { ex = ex.InnerException; Console.WriteLine(ex.Message); } /* * Basicamente en la propiedad InnerException se guarda el Objeto Exception que fue arrojado previamente. */ } Console.ReadKey(); }