Wird geladen...

Ausnahmebehandlung in C# (try, catch, finally)

Erlernen Sie die Ausnahmebehandlung in C# mit try-, catch- und finally-Blöcken zur sicheren Fehlerverwaltung anhand von Beispielen.

In C# dient die Fehlerbehandlung dazu, unerwartete Situationen während der Programmausführung abzufangen und zu kontrollieren. So stürzt das Programm nicht plötzlich ab, sondern kann dem Benutzer eine passende Meldung anzeigen oder alternative Aktionen ausführen. Die Fehlerbehandlung verwendet die Blöcke try, catch und finally.


Verwendung von try-catch

Im try-Block stehen Anweisungen, die eine Ausnahme auslösen können. Tritt ein Fehler auf, wird der catch-Block ausgeführt.


try
{
    int zahl = int.Parse("abc"); // Ungültige Konvertierung
    Console.WriteLine("Zahl: " + zahl);
}
catch (FormatException ex)
{
    Console.WriteLine("Fehler: Ungültiges Zahlenformat.");
}
// Ausgabe:
Fehler: Ungültiges Zahlenformat.

Mehrere catch-Blöcke

Für verschiedene Fehlertypen können mehrere catch-Blöcke verwendet werden. So lässt sich jeder Fehlertyp unterschiedlich behandeln.


try
{
    int[] zahlen = { 1, 2, 3 };
    Console.WriteLine(zahlen[5]); // Index außerhalb des Bereichs
}
catch (IndexOutOfRangeException)
{
    Console.WriteLine("Fehler: Array-Index außerhalb des Bereichs.");
}
catch (Exception ex)
{
    Console.WriteLine("Unerwarteter Fehler: " + ex.Message);
}

finally-Block

Der finally-Block wird immer ausgeführt, egal ob ein Fehler auftritt oder nicht. Er wird häufig für Aufräumarbeiten wie das Schließen von Dateien oder das Beenden von Datenbankverbindungen verwendet.


try
{
    Console.WriteLine("Datei wird geöffnet...");
    throw new Exception("Datei nicht gefunden!");
}
catch (Exception ex)
{
    Console.WriteLine("Fehler: " + ex.Message);
}
finally
{
    Console.WriteLine("Datei wird geschlossen...");
}
// Ausgabe:
Datei wird geöffnet...
Fehler: Datei nicht gefunden!
Datei wird geschlossen...

Eigene Exceptions werfen

Eigene Fehlerbedingungen können definiert und mit throw ausgelöst werden.


static void Teile(int a, int b)
{
    if (b == 0)
        throw new DivideByZeroException("Fehler: Division durch Null!");
    Console.WriteLine("Ergebnis: " + (a / b));
}

static void Main()
{
    try
    {
        Teile(10, 0);
    }
    catch (DivideByZeroException ex)
    {
        Console.WriteLine("Fehler: " + ex.Message);
    }
}
// Ausgabe:
Fehler: Division durch Null!

Kurz & Knapp

  • try: Block mit potenziell fehleranfälligem Code.
  • catch: Behandelt den Fehler, wenn er auftritt.
  • finally: Wird immer ausgeführt, meist für Aufräumarbeiten.
  • throw: Zum Auslösen eigener Exceptions.
  • Mehrere catch-Blöcke ermöglichen eine getrennte Behandlung unterschiedlicher Fehlertypen.