Fehlerbehandlung in C#: try/catch, finally und bewährte Methoden

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Fehlerbehandlung in C#: try/catch und mehr



Fehlerbehandlung ist eine der Schlüsselkomponenten zuverlässiger Software. In C# wird dafür der Mechanismus der Ausnahmen (exceptions) verwendet. Die korrekte Anwendung der Konstrukte try, catch und finally ermöglicht es nicht nur, einen Programmabsturz zu vermeiden, sondern macht den Code auch lesbarer und vorhersagbarer. In diesem Artikel behandeln wir die Grundlagen der Ausnahmebehandlung, Best Practices und fortgeschrittene Möglichkeiten, die die .NET-Plattform bietet.



1. Der grundlegende try/catch/finally-Block



Das wichtigste Werkzeug zur Fehlerbehandlung in C# ist der try-catch-finally-Block. Seine Syntax ist intuitiv verständlich:



  • try — enthält Code, der eine Ausnahme auslösen kann.
  • catch — fängt die Ausnahme ab und behandelt sie.
  • finally — wird immer ausgeführt, unabhängig davon, ob eine Ausnahme aufgetreten ist. Es wird zur Freigabe von Ressourcen verwendet (Schließen von Dateien, Datenbankverbindungen).


Betrachten wir ein einfaches Beispiel – die Division durch Null:



using System;

class Program{ static void Main() { try { int a = 10; int b = 0; int result = a / b; // Hier wird eine Ausnahme ausgelöst Console.WriteLine($"Ergebnis: {result}"); } catch (DivideByZeroException ex) { Console.WriteLine($"Fehler: {ex.Message}"); } finally { Console.WriteLine("finally-Block ausgeführt."); } }}


Ausgabe des Programms:

Fehler: Versuch, durch Null zu dividieren.finally-Block ausgeführt.


Beachten Sie: Wenn kein spezifischer Ausnahmetyp angegeben wird, fängt der catch-Block alle Ausnahmen ab. Das kann praktisch sein, gilt aber oft als schlechte Praxis, da es echte Probleme verbirgt.



2. Ausnahmetypen und ihre Hierarchie



In C# erben alle Ausnahmen von der Basisklasse System.Exception. Die am häufigsten verwendeten sind:



  • SystemException — Basisklasse für Systemausnahmen.
  • NullReferenceException — Zugriff auf ein Objekt, das null ist.
  • IndexOutOfRangeException — Zugriff außerhalb der Array-Grenzen.
  • InvalidOperationException — Aufruf einer Methode in einem ungültigen Zustand.
  • ArgumentException und seine Ableitungen (ArgumentNullException, ArgumentOutOfRangeException) — ungültige Methodenargumente.


Sie können mehrere Ausnahmetypen in einem einzigen catch-Block abfangen (seit C# 6):



try{    // Code}catch (ArgumentNullException ex) when (ex.ParamName == "userId"){    Console.WriteLine("Der Parameter userId darf nicht null sein.");}catch (InvalidOperationException ex){    Console.WriteLine($"Ungültige Operation: {ex.Message}");}catch (Exception ex) when (Log(ex, "Unbekannter Fehler")){    // Ausnahmefilter – der Block wird nur ausgeführt, wenn die Bedingung wahr ist    throw; // Wirft die Ausnahme weiter}


Ausnahmefilter (Schlüsselwort when) ermöglichen eine flexiblere Steuerung der Behandlungslogik, ohne die Aufrufliste zu verlieren.



3. Eigene Ausnahmen erstellen



Manchmal reichen die Standardausnahmen nicht aus. Sie können Ihre eigene Ausnahmeklasse erstellen, indem Sie von Exception erben:



public class InvalidAgeException : Exception{    public int Age { get; }

public InvalidAgeException(int age, string message) : base(message) { Age = age; }

public InvalidAgeException(int age, string message, Exception inner) : base(message, inner) { Age = age; }}


Jetzt

Blogs

Buchempfehlungen