示例#1
0
        /// <summary>
        /// En c# las excepciones pueden ser manejadas a través del uso de los bloques try-catch-finally.
        /// </summary>
        public static void Manejo()
        {
            Console.WriteLine("Creamos una instancia de la clase auto");
            Auto auto = new Auto();

            Console.WriteLine("Ejecutamos la sentencia auto.AddRueda(new Rueda { Marca = \"firestone\", Rodado = 500 }); dentro de un bloque try catch");
            try
            {
                // toda sentencia ejecutada dentro de un bloque try tratará los errores de forma "manejada"
                auto.AddRueda(new Rueda {
                    Marca = "firestone", Rodado = 500
                });

                Console.WriteLine("La rueda fue agregada correctamente");
            }
            catch (Exception ex) // Toda excepción que fuese arrojada dentro de un bloque try caerá dentro de este bloque catch.
            {
                Console.WriteLine("Se generó un error agregando una rueda");
                Console.WriteLine($"El mensaje de error es: {ex.Message}");

                // El tipo exception nos provee de información importante para comprensión del error
                // tal como el mensaje de error o el call stack al momento en que se genera la excepción.
            }
            finally
            {
                // el bloque finally se utiliza para ejecutar código que se debe ejecutar
                // luego de try - catch, sin importar si hubo alguna excepción en el camino o no.
                Console.WriteLine("Este mensaje es ejecutado dentro del bloque finally");
            }
        }
示例#2
0
        /// <summary>
        /// El manejo de excepciones en c# cuenta con una jerarquía de tipos que establece
        /// que el tipo 'Exception' es el tipo raíz de toda excepción.
        /// Esto quiere decir que toda excepción debe, en algún punto, derivar del tipo Exception.
        /// </summary>
        public static void Jerarquia()
        {
            Console.WriteLine("Creamos una instancia de la clase auto");
            Auto auto = new Auto();

            Console.WriteLine("Ejecutamos la sentencia auto.AddRueda(new Rueda { Marca = \"firestone\", Rodado = 500 }); dentro de un bloque try catch");
            try
            {
                auto.AddRueda(new Rueda {
                    Marca = "firestone", Rodado = 500
                });

                Console.WriteLine("La rueda fue agregada correctamente");
            }
            catch (ArgumentNullException ex)
            {
                // si la excepción arrojada dentro del bloque try es de tipo ArgumentNullException caeremos en este catch y no en los siguientes.
                // si la excepción arrojada no es del tipo ArgumentNullException este bloque será ignorado
                Console.WriteLine("Bloque catch de tipo ArgumentNullException");
                Console.WriteLine($"El mensaje de error es: {ex.Message}");
            }
            catch (InvalidOperationException ex)
            {
                // si la excepción arrojada dentro del bloque try es de tipo InvalidOperationException caeremos en este catch y no en los siguientes.
                // si la excepción arrojada no es del tipo InvalidOperationException este bloque será ignorado
                Console.WriteLine("Bloque catch de tipo InvalidOperationException");
                Console.WriteLine($"El mensaje de error es: {ex.Message}");
            }
            catch (Exception ex)
            {
                // Este bloque catch capturará todas las excepciones que fueron lanzadas y no fueron capturadas por un catch anterior.
                Console.WriteLine("Bloque catch de tipo Exception");
                Console.WriteLine($"El mensaje de error es: {ex.Message}");
            }

            Console.WriteLine();
            Console.WriteLine("Ejecutamos la sentencia auto.AddRueda(null); dentro de un bloque try catch");
            try
            {
                auto.AddRueda(null);

                Console.WriteLine("La rueda fue agregada correctamente");
            }
            catch (ArgumentNullException ex)
            {
                // si la excepción arrojada dentro del bloque try es de tipo ArgumentNullException caeremos en este catch y no en los siguientes.
                // si la excepción arrojada no es del tipo ArgumentNullException este bloque será ignorado
                Console.WriteLine("Bloque catch de tipo ArgumentNullException");
                Console.WriteLine($"El mensaje de error es: {ex.Message}");
            }
            catch (InvalidOperationException ex)
            {
                // si la excepción arrojada dentro del bloque try es de tipo InvalidOperationException caeremos en este catch y no en los siguientes.
                // si la excepción arrojada no es del tipo InvalidOperationException este bloque será ignorado
                Console.WriteLine("Bloque catch de tipo InvalidOperationException");
                Console.WriteLine($"El mensaje de error es: {ex.Message}");
            }
            catch (Exception ex)
            {
                // Este bloque catch capturará todas las excepciones que fueron lanzadas y no fueron capturadas por un catch anterior.
                Console.WriteLine("Bloque catch de tipo Exception");
                Console.WriteLine($"El mensaje de error es: {ex.Message}");
            }
        }