0Pricing
C# Academy · Lección

try/catch/finally, throw new frente a rethrow

Use try/catch/finally para gestionar errores de forma predecible; comprenda la diferencia entre throw new y rethrow, y mantenga los ejemplos breves y centrados.

try/catch/finally, throw new frente a rethrow es una lección gratuita de C# Academy en CoddyKit. Esta es la lección 1 de 3. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de C# Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de C# Academy incluye 3 lecciones en total.

Descripción general de las excepciones

Objetivo: Gestionar y propagar errores de forma segura.

  • try/catch: gestione excepciones específicas
  • finally: se ejecuta siempre para realizar la limpieza
  • throw new frente a relanzamiento
  • Mantenga los manejadores breves; no oculte los errores

Captura específica

Capture la excepción más específica que espere; mantenga el manejador breve y claro.

using System;

public class Program
{
  public static void Main(string[] args)
  {
    Console.WriteLine("Start");
    try
    {
      int x = 10;
      int y = 0; // will cause DivideByZeroException
      Console.WriteLine(x / y);
    }
    catch (DivideByZeroException ex)
    {
      Console.WriteLine("Cannot divide by zero: " + ex.GetType().Name);
    }
    Console.WriteLine("Continue");
  }
}

Orden de las capturas

El orden importa: coloque primero las capturas específicas y deje al final una captura genérica de Exception como red de seguridad.

using System;

public class Program
{
  static int ParseAndDivide(string text, int divisor)
  {
    // Throws FormatException or DivideByZeroException
    int value = int.Parse(text);
    return value / divisor;
  }

  public static void Main(string[] args)
  {
    try
    {
      Console.WriteLine(ParseAndDivide("not-a-number", 2));
    }
    catch (FormatException)
    {
      Console.WriteLine("Bad number format");
    }
    catch (Exception ex)
    {
      // Fallback last
      Console.WriteLine("Other error: " + ex.GetType().Name);
    }
  }
}

finally para la limpieza

Coloque la limpieza en finally. Se ejecuta tanto si se produce una excepción como si no.

using System;

public class Program
{
  static bool opened = false;

  static void UseFakeResource()
  {
    try
    {
      opened = true;
      Console.WriteLine("Open");
      throw new InvalidOperationException("boom");
    }
    catch (InvalidOperationException)
    {
      Console.WriteLine("Handled");
    }
    finally
    {
      opened = false; // cleanup path
      Console.WriteLine("Close");
    }
  }

  public static void Main(string[] args)
  {
    UseFakeResource();
    Console.WriteLine("Opened? " + opened);
  }
}

Relanzamiento correcto

Use throw; para relanzar la excepción y conservar la pila original. throw ex; la restablece. Envuélvala en una excepción nueva solo cuando necesite añadir contexto.

using System;

public class Program
{
  static void BadRethrow()
  {
    try
    {
      Fail();
    }
    catch (Exception ex)
    {
      // Resets stack trace:
      throw ex; // BAD rethrow
    }
  }

  static void GoodRethrow()
  {
    try
    {
      Fail();
    }
    catch
    {
      // Preserves original stack trace:
      throw; // GOOD rethrow
    }
  }

  static void Fail()
  {
    throw new InvalidOperationException("fail");
  }

  public static void Main(string[] args)
  {
    try { BadRethrow(); }
    catch (Exception ex)
    {
      Console.WriteLine("Bad: " + (ex.StackTrace == null ? "no stack" : "stack reset likely"));
    }

    try { GoodRethrow(); }
    catch (Exception ex)
    {
      Console.WriteLine("Good: preserves original stack");
    }
  }
}

Directrices de gestión

Directrices:

  • Capture una excepción cuando pueda gestionarla o añadir contexto.
  • De lo contrario, deje que se propague.
  • Mantenga los manejadores pequeños; evite ignorar excepciones silenciosamente.
  • Use finally para la limpieza; la liberación de recursos se trata en la siguiente lección.

Regla de relanzamiento

Comprobación rápida: ¿Qué instrucción vuelve a lanzar correctamente la excepción actual y conserva la pila de llamadas original?

Repaso

Repaso: Use try/catch para errores específicos, finally para la limpieza y prefiera throw; al relanzar para conservar la pila original.

Preguntas frecuentes

¿La lección «try/catch/finally, throw new frente a rethrow» es gratis?

Sí — el texto completo de «try/catch/finally, throw new frente a rethrow» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de C# Academy, actualiza a CoddyKit PRO. El curso de C# Academy incluye 3 lecciones en total.

¿Qué aprenderé en «try/catch/finally, throw new frente a rethrow»?

Use try/catch/finally para gestionar errores de forma predecible; comprenda la diferencia entre throw new y rethrow, y mantenga los ejemplos breves y centrados. Practicas C# Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar C# Academy?

No se requiere experiencia previa. C# Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 1 de 3.

¿Cuánto tiempo toma la lección «try/catch/finally, throw new frente a rethrow»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de C# Academy?

Sí. Cada lección de C# Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. try/catch/finally, throw new frente a rethrow
  2. Excepciones personalizadas y diseño de errores
  3. IDisposable y la instrucción using
← Volver a C# Academy