Multiple Catch Blocks
Parte de la sección Lógica y Flujo del Journey de C# de Coddy — lección 25 de 66.
Los bloques catch múltiples permiten manejar diferentes tipos de excepciones con código específico para cada tipo de excepción.
Comienza con un bloque try básico:
try
{
int number = int.Parse("abc");
}
Añade un bloque catch para una excepción específica:
try
{
int number = int.Parse("abc");
}
catch (FormatException ex)
{
Console.WriteLine("Format Exception: " + ex.Message);
}
Puedes agregar múltiples bloques catch para manejar diferentes excepciones:
try
{
int number = int.Parse("abc");
int result = a10 / number;
}
catch (FormatException ex)
{
Console.WriteLine("Format Exception: " + ex.Message);
}
catch (DivideByZeroException ex)
{
Console.WriteLine("Divide By Zero Exception: " + ex.Message);
}
El primer bloque catch coincidente se ejecutará. Ordena tus bloques catch desde los tipos de excepción más específicos hasta los más generales.
Desafío
FácilCrea un método llamado DivideNumbers que tome dos parámetros string:
numeratorStr: una cadena que representa el numeradordenominatorStr: una cadena que representa el denominador
El método debe:
- Intentar convertir ambas cadenas a enteros
- Intentar dividir el numerador por el denominador
- Devolver el resultado como un entero
- Manejar FormatException imprimiendo "Invalid format" y devolviendo 0
- Manejar DivideByZeroException imprimiendo "Cannot divide by zero" y devolviendo 0
- Manejar cualquier otra excepción con un bloque catch general que imprima "An error occurred" y devuelva 0
Hoja de referencia
Los bloques catch múltiples permiten manejar diferentes tipos de excepciones con código específico para cada tipo de excepción.
try-catch básico con excepción específica:
try
{
int number = int.Parse("abc");
}
catch (FormatException ex)
{
Console.WriteLine("Format Exception: " + ex.Message);
}
Bloques catch múltiples para diferentes excepciones:
try
{
int number = int.Parse("abc");
int result = 10 / number;
}
catch (FormatException ex)
{
Console.WriteLine("Format Exception: " + ex.Message);
}
catch (DivideByZeroException ex)
{
Console.WriteLine("Divide By Zero Exception: " + ex.Message);
}
El primer bloque catch coincidente se ejecutará. Ordena los bloques catch desde los tipos de excepciones más específicos hasta los más generales.
Pruébalo tú mismo
using System;
public class Program
{
public static int DivideNumbers(string numeratorStr, string denominatorStr)
{
// Escribe tu código aquí
}
public static void Main(string[] args)
{
string numeratorStr = Console.ReadLine();
string denominatorStr = Console.ReadLine();
int result = DivideNumbers(numeratorStr, denominatorStr);
Console.WriteLine("Result: " + result);
}
}Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Lógica y Flujo
1Multi-dimensional Arrays
2D Arrays BasicsDeclaring and Initializing 2DAccessing 2D Array ElementsNested Loops with 2D ArraysJagged ArraysCommon Matrix OperationsRecap - Multi-dimensional4Flow Control Techniques
Early ReturnsGuard ClausesJump Statements (goto)Break and ContinueFlatten Nested Conditionals7Logical Operators Advanced
Short-Circuit EvaluationConditional Logical OperatorsOperator PrecedenceRecap - Advanced Operators2Advanced Decision Making
Multiple ConditionsComplex Boolean LogicIf vs. Switch ComparisonNested Switch StatementsRecap - Advanced Decisions5Exception Handling
Try-Catch BasicsException TypesMultiple Catch BlocksWorking with FilesFinally BlockUsing vs. Try-FinallyCustom ExceptionsRecap - Error Handling3Loop Enhancements
Loop PerformanceIterating ComplexEach Loop TypeRefactoring LoopsRecap - Optimized Loops6Null Handling
Null Reference BasicsNullable Value TypesNull Checking PatternsDefensive ProgrammingRecap - Null Safety