Saltar al contenido principal

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

  1. El bloque try contiene el código que puede producir un error.
  2. El bloque catch captura y maneja la excepción.
  3. Opcionalmente se puede usar finally para 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 finally o con using.
  • Evitar silenciar las excepciones sin tratarlas.