Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Die Ausnahmebehandlungsfeatures der C#-Sprache helfen Ihnen bei unerwarteten oder außergewöhnlichen Situationen, die auftreten, wenn ein Programm ausgeführt wird. Bei der Ausnahmebehandlung werden die try
Aktionen und catch
finally
Schlüsselwörter verwendet, die möglicherweise nicht erfolgreich ausgeführt werden können, um Fehler zu behandeln, wenn Sie sich dafür entscheiden, dass dies sinnvoll ist, und anschließend Ressourcen zu bereinigen. Ausnahmen können von der Common Language Runtime (CLR), von .NET- oder Drittanbieterbibliotheken oder durch Anwendungscode generiert werden. Ausnahmen werden mithilfe des Schlüsselworts throw
erstellt.
In vielen Fällen kann eine Ausnahme nicht von einer Methode ausgelöst werden, die Ihr Code direkt aufgerufen hat, sondern durch eine weitere Methode weiter unten im Aufrufstapel. Wenn eine Ausnahme ausgelöst wird, löst der CLR den Stapel ab, sucht nach einer Methode mit einem catch
Block für den spezifischen Ausnahmetyp und führt den ersten solchen catch
Block aus, der gefunden wird. Wenn im Aufrufstapel kein geeigneter catch
Block gefunden wird, wird der Prozess beendet und dem Benutzer eine Meldung angezeigt.
In diesem Beispiel testet eine Methode die Division durch Null und fängt den Fehler ab. Ohne die Ausnahmebehandlung würde dieses Programm mit einem DivideByZeroException-Fehler beendet .
public class ExceptionTest
{
static double SafeDivision(double x, double y)
{
if (y == 0)
throw new DivideByZeroException();
return x / y;
}
public static void Main()
{
// Input for test purposes. Change the values to see
// exception handling behavior.
double a = 98, b = 0;
double result;
try
{
result = SafeDivision(a, b);
Console.WriteLine($"{a} divided by {b} = {result}");
}
catch (DivideByZeroException)
{
Console.WriteLine("Attempted divide by zero.");
}
}
}
Übersicht über Ausnahmen
Ausnahmen weisen die folgenden Eigenschaften auf:
- Ausnahmen sind Typen, die letztendlich von
System.Exception
. - Verwenden Sie einen
try
Block um die Anweisungen, die Ausnahmen auslösen können. - Sobald eine Ausnahme im
try
Block auftritt, springt der Steuerfluss zum ersten zugeordneten Ausnahmehandler, der an einer beliebigen Stelle im Aufrufstapel vorhanden ist. In C# wird dascatch
Schlüsselwort verwendet, um einen Ausnahmehandler zu definieren. - Wenn kein Ausnahmehandler für eine bestimmte Ausnahme vorhanden ist, wird die Ausführung des Programms mit einer Fehlermeldung beendet.
- Fangen Sie keine Ausnahme ab, es sei denn, Sie können sie behandeln und die Anwendung in einem bekannten Zustand belassen. Wenn Sie das
throw
Schlüsselwort am Ende des Blocks abfangenSystem.Exception
, wiederholen Sie dies mithilfe descatch
Schlüsselworts. - Wenn ein
catch
Block eine Ausnahmevariable definiert, können Sie sie verwenden, um weitere Informationen zum Typ der aufgetretenen Ausnahme zu erhalten. - Ausnahmen können durch ein Programm mithilfe des
throw
Schlüsselworts explizit generiert werden. - Ausnahmeobjekte enthalten detaillierte Informationen zum Fehler, z. B. den Status des Aufrufstapels und eine Textbeschreibung des Fehlers.
- Code in einem
finally
Block wird unabhängig davon ausgeführt, ob eine Ausnahme ausgelöst wird. Verwenden Sie einenfinally
Block, um Ressourcen freizugeben, z. B. um Datenströme oder Dateien zu schließen, dietry
im Block geöffnet wurden. - Verwaltete Ausnahmen in .NET werden über den strukturierten Ausnahmebehandlungsmechanismus von Win32 implementiert. Weitere Informationen finden Sie unter Structured Exception Handling (C/C++) und A Crash Course on the Depths of Win32 Structured Exception Handling.
C#-Sprachspezifikation
Weitere Informationen finden Sie unter Ausnahmen in der C#-Sprachspezifikation. Die Sprachspezifikation ist die endgültige Quelle für C#-Syntax und -Verwendung.