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.