0Pricing
C# Academy · Lektion

try/catch/finally, throw new und erneutes Auslösen

Verwenden Sie try/catch/finally für eine vorhersehbare Fehlerbehandlung. Verstehen Sie den Unterschied zwischen throw new und dem erneuten Auslösen von Ausnahmen. Halten Sie die Beispiele klein und fokussiert.

try/catch/finally, throw new und erneutes Auslösen ist eine kostenlose C# Academy-Lektion auf CoddyKit. Dies ist Lektion 1 von 3. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des C# Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der C# Academy-Kurs umfasst insgesamt 3 Lektionen.

Überblick über Ausnahmen

Ziel: Behandeln und propagieren Sie Fehler sicher.

  • try/catch: spezifische Ausnahmen behandeln.
  • finally: wird zur Bereinigung immer ausgeführt.
  • throw new im Vergleich zu rethrow.
  • Halten Sie Handler kurz; verbergen Sie keine Fehler.

Spezifischer Catch

Fangen Sie die spezifischste erwartete Ausnahme ab; halten Sie den Handler kurz und verständlich.

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");
  }
}

Reihenfolge von Catch-Blöcken

Die Reihenfolge ist wichtig: Platzieren Sie spezifische catch-Blöcke zuerst und einen generischen Exception-Catch zuletzt als Sicherheitsnetz.

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 zur Bereinigung

Führen Sie die Bereinigung in finally durch. Dieser Block wird unabhängig davon ausgeführt, ob eine Ausnahme auftritt.

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);
  }
}

Korrekt erneut auslösen

Verwenden Sie throw;, um eine Ausnahme erneut auszulösen und den ursprünglichen Stack beizubehalten. throw ex; setzt ihn zurück. Verpacken Sie die Ausnahme nur dann in eine neue, wenn Sie Kontext hinzufügen.

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");
    }
  }
}

Richtlinien zur Ausnahmebehandlung

Richtlinien:

  • Fangen Sie eine Ausnahme ab, wenn Sie sie behandeln oder Kontext hinzufügen können.
  • Andernfalls lassen Sie sie nach oben weiterlaufen.
  • Halten Sie Handler klein; vermeiden Sie es, Ausnahmen stillschweigend zu verschlucken.
  • Verwenden Sie finally zur Bereinigung; die Ressourcenfreigabe ist die nächste Lektion.

Regel zum erneuten Auslösen

Schnelltest: Welche Anweisung löst die aktuelle Ausnahme korrekt erneut aus und bewahrt dabei den ursprünglichen Stacktrace?

Zusammenfassung

Zusammenfassung: Verwenden Sie try/catch für spezifische Fehler, finally zur Bereinigung und beim erneuten Auslösen bevorzugt throw;, damit der ursprüngliche Stack erhalten bleibt.

Häufig gestellte Fragen

Ist die Lektion „try/catch/finally, throw new und erneutes Auslösen“ kostenlos?

Ja — der vollständige Text von „try/catch/finally, throw new und erneutes Auslösen“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des C# Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der C# Academy-Kurs umfasst insgesamt 3 Lektionen.

Was lerne ich in „try/catch/finally, throw new und erneutes Auslösen“?

Verwenden Sie try/catch/finally für eine vorhersehbare Fehlerbehandlung. Verstehen Sie den Unterschied zwischen throw new und dem erneuten Auslösen von Ausnahmen. Halten Sie die Beispiele klein und f… Du übst C# Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um C# Academy zu starten?

Keine Vorkenntnisse erforderlich. C# Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 1 von 3.

Wie lange dauert die Lektion „try/catch/finally, throw new und erneutes Auslösen“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser C# Academy-Lektion Code schreiben und ausführen?

Ja. Jede C# Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. try/catch/finally, throw new und erneutes Auslösen
  2. Eigene Ausnahmen und Fehlerdesign
  3. IDisposable, using-Anweisung
← Zurück zu C# Academy