Manejo de Errores en C#
El manejo de errores en C# es fundamental para crear programas robustos y confiables.
El lenguaje ofrece mecanismos para detectar, capturar y responder a situaciones inesperadas mediante excepciones.
Uso de try-catch
La estructura try-catch permite ejecutar código que podría fallar y manejar la excepción en caso de error.
try
{
int numero = 10;
int resultado = numero / 0; // Error: división entre cero
}
catch (DivideByZeroException ex)
{
Console.WriteLine("No se puede dividir por cero.");
Console.WriteLine($"Detalle: {ex.Message}");
}
Flujo del try-catch
- El bloque
trycontiene el código que puede producir un error. - El bloque
catchcaptura y maneja la excepción. - Opcionalmente se puede usar
finallypara ejecutar código sin importar si ocurrió un error:
try
{
Console.WriteLine("Intentando abrir recurso...");
}
catch (Exception ex)
{
Console.WriteLine($"Ocurrió un error: {ex.Message}");
}
finally
{
Console.WriteLine("Liberando recursos...");
}
Excepciones comunes en C#
C# proporciona diferentes clases de excepciones que heredan de System.Exception.
1. System.Exception
Es la clase base de todas las excepciones. Se puede capturar para manejar cualquier error genérico.
try
{
throw new Exception("Error genérico.");
}
catch (Exception ex)
{
Console.WriteLine($"Excepción capturada: {ex.Message}");
}
2. System.NullReferenceException
Ocurre cuando se intenta acceder a un objeto que es null.
string texto = null;
try
{
Console.WriteLine(texto.Length); // Error: objeto nulo
}
catch (NullReferenceException ex)
{
Console.WriteLine("Referencia nula detectada.");
}
3. System.IndexOutOfRangeException
Sucede cuando se intenta acceder a un índice inexistente en un array o colección.
int[] numeros = { 1, 2, 3 };
try
{
Console.WriteLine(numeros[5]); // Error: índice fuera de rango
}
catch (IndexOutOfRangeException ex)
{
Console.WriteLine("Índice fuera de rango.");
}
4. System.DivideByZeroException
Aparece cuando se intenta dividir un número por cero.
try
{
int resultado = 10 / 0;
}
catch (DivideByZeroException ex)
{
Console.WriteLine("Error: división entre cero.");
}
Buenas prácticas en el manejo de errores
- Capturar solo las excepciones necesarias (evitar usar siempre
Exception). - Usar mensajes descriptivos para entender el error.
- Liberar recursos en el bloque
finallyo conusing. - Evitar silenciar las excepciones sin tratarlas.