En C#, las excepciones son situaciones inesperadas que ocurren durante la ejecución de un programa y que interrumpen su flujo normal. Estas situaciones pueden ser errores como división por cero, acceso a un índice de un array que no existe, o la apertura de un archivo que no se encuentra. Para manejar estas situaciones de manera controlada, se utilizan las estructuras try
, catch
, finally
, y throw
.
Manejo básico de excepciones con try y catch
El bloque try
contiene el código que puede lanzar una excepción, mientras que el bloque catch
maneja la excepción si ocurre. Aquí tienes un ejemplo simple:
try
{
int divisor = 0;
int resultado = 10 / divisor;
}
catch (DivideByZeroException ex)
{
Console.WriteLine("Error: No se puede dividir por cero.");
}
En este ejemplo, si intentamos dividir por cero, se lanzará una excepción DivideByZeroException
, y el bloque catch
la capturará para mostrar un mensaje de error.
Bloque finally
El bloque finally
se usa para ejecutar código que debe correr sin importar si se produjo una excepción o no. Esto es útil para liberar recursos, cerrar archivos o conexiones de base de datos, etc.
try
{
// Código que puede lanzar una excepción
}
catch (Exception ex)
{
Console.WriteLine("Ocurrió un error: " + ex.Message);
}
finally
{
Console.WriteLine("Este bloque se ejecuta siempre.");
}
Lanzando excepciones manualmente con throw
A veces, puedes querer lanzar tus propias excepciones. Esto se hace con la palabra clave throw
. Puedes usar esto para validar datos y lanzar una excepción si algo no cumple con los requisitos.
void ValidarEdad(int edad)
{
if (edad < 18)
{
throw new ArgumentOutOfRangeException("edad", "La edad debe ser mayor a 18.");
}
}
try
{
ValidarEdad(16);
}
catch (ArgumentOutOfRangeException ex)
{
Console.WriteLine("Error: " + ex.Message);
}
En este ejemplo, se lanza una excepción ArgumentOutOfRangeException
si la edad es menor a 18, y se captura en el bloque catch
.
Conclusión
El manejo de excepciones en C# es fundamental para crear aplicaciones robustas y resistentes a errores. Utilizando las estructuras try
, catch
, finally
, y throw
, puedes gestionar adecuadamente los errores, asegurándote de que tu aplicación se comporte de manera predecible incluso en situaciones inesperadas.