Behandeln und Auslösen von Ausnahmen in .NETHandling and throwing exceptions in .NET

Anwendungen müssen in der Lage sein, Fehler zu behandeln, die während der Ausführung konsistent auftreten. Applications must be able to handle errors that occur during execution in a consistent manner. .NET bietet ein Modell, um Anwendungen auf einheitliche Weise über Fehler zu benachrichtigen: .NET-Vorgänge geben Fehler durch Auslösen von Ausnahmen an..NET provides a model for notifying applications of errors in a uniform way: .NET operations indicate failure by throwing exceptions.

AusnahmenExceptions

Bei einer Ausnahme handelt es sich um einen Fehlerzustand oder unerwartetes Verhalten beim Ausführen eines Programms.An exception is any error condition or unexpected behavior that is encountered by an executing program. Ausnahmen können durch Fehler in Ihrem oder in aufgerufenem Code (z.B. bei freigegebenen Bibliotheken), nicht verfügbare Betriebssystemressourcen, unerwartete, von der Runtime festgestellte Fehlerzustände (z.B. durch nicht überprüfbaren Code) und andere Ereignisse ausgelöst werden.Exceptions can be thrown because of a fault in your code or in code that you call (such as a shared library), unavailable operating system resources, unexpected conditions that the runtime encounters (such as code that can't be verified), and so on. Anwendungen können in einigen, aber nicht allen Fällen wiederhergestellt werden.Your application can recover from some of these conditions, but not from others. Obwohl bei den meisten Anwendungsausnahmen eine Wiederherstellung möglich ist, ist dies beim Großteil der Laufzeitausnahmen nicht der Fall.Although you can recover from most application exceptions, you can't recover from most runtime exceptions.

In .NET ist eine Ausnahme ein Objekt, das von der System.Exception-Klasse erbt.In .NET, an exception is an object that inherits from the System.Exception class. Eine Ausnahme wird in einem Codebereich ausgelöst, in dem ein Fehler aufgetreten ist.An exception is thrown from an area of code where a problem has occurred. Die Ausnahme bleibt solange im Stapel, bis sie durch die Anwendung behandelt oder das Programm beendet wird.The exception is passed up the stack until the application handles it or the program terminates.

Ausnahmen vs. herkömmliche FehlerbehandlungsmethodenExceptions vs. traditional error-handling methods

Herkömmliche Modelle der Fehlerbehandlung in Sprachen beruhten bisher entweder auf eigenen sprachenabhängigen Methoden der Fehlererkennung und -behandlung oder auf dem Fehlerbehandlungsmechanismus des Betriebssystems.Traditionally, a language's error-handling model relied on either the language's unique way of detecting errors and locating handlers for them, or on the error-handling mechanism provided by the operating system. Die Art und Weise, in der die Ausnahmebehandlung in .NET implementiert ist, bietet folgende Vorteile:The way .NET implements exception handling provides the following advantages:

  • Das Auslösen und Behandeln von Ausnahmen funktioniert für alle .NET-Programmiersprachen gleich.Exception throwing and handling works the same for .NET programming languages.

  • Eine besondere Sprachsyntax ist für die Ausnahmebehandlung nicht erforderlich, trotzdem kann jede Sprache ihre eigene Syntax definieren.Doesn't require any particular language syntax for handling exceptions, but allows each language to define its own syntax.

  • Ausnahmen können prozess- und sogar computerübergreifend ausgelöst werden.Exceptions can be thrown across process and even machine boundaries.

  • Einer Anwendung kann Ausnahmebehandlungscode hinzugefügt werden, um die Programmzuverlässigkeit zu erhöhen.Exception-handling code can be added to an application to increase program reliability.

Ausnahmen bieten verschiedene Vorteile gegenüber anderen Methoden zur Fehlerbenachrichtigung, z.B. Rückgabecodes.Exceptions offer advantages over other methods of error notification, such as return codes. Fehler bleiben nicht unerkannt, da die Runtime Ihre Anwendung beendet, wenn eine Ausnahme ausgelöst wurde und nicht behandelt wird.Failures don't go unnoticed because if an exception is thrown and you don't handle it, the runtime terminates your application. Ungültige Werte werden nicht weiter im System weitergegeben – was passieren kann, wenn im Code nicht geprüft wird, ob ein Fehlerrückgabecode vorhanden ist.Invalid values don't continue to propagate through the system as a result of code that fails to check for a failure return code.

Allgemeine AusnahmenCommon exceptions

In der folgenden Tabelle sind einige allgemeine Ausnahmen sowie Beispiele aufgeführt, die die Ausnahmen verursachen können.The following table lists some common exceptions with examples of what can cause them.

AusnahmetypException type BeschreibungDescription BeispielExample
Exception Die Basisklasse für alle Ausnahmen.Base class for all exceptions. Keines (verwenden Sie eine abgeleitete Klasse dieser Ausnahme).None (use a derived class of this exception).
IndexOutOfRangeException Wird von der Runtime nur dann ausgelöst, wenn ein Array falsch indiziert ist.Thrown by the runtime only when an array is indexed improperly. Indizieren eines Arrays außerhalb seines gültigen Vereichs:Indexing an array outside its valid range:
arr[arr.Length+1]
NullReferenceException Wird von der Runtime nur dann ausgelöst, wenn auf ein NULL-Objekt verwiesen wird.Thrown by the runtime only when a null object is referenced. object o = null;
o.ToString();
InvalidOperationException Wird von Methoden ausgelöst, wenn ein ungültiger Status vorliegt.Thrown by methods when in an invalid state. Aufrufen von Enumerator.MoveNext() nach Entfernen eines Elements aus der zugrunde liegenden Auflistung.Calling Enumerator.MoveNext() after removing an item from the underlying collection.
ArgumentException Die Basisklasse für alle Argumentausnahmen.Base class for all argument exceptions. Keines (verwenden Sie eine abgeleitete Klasse dieser Ausnahme).None (use a derived class of this exception).
ArgumentNullException Wird von Methoden ausgelöst, bei denen ein Argument nicht gleich NULL sein darf.Thrown by methods that do not allow an argument to be null. String s = null;
"Calculate".IndexOf(s);
ArgumentOutOfRangeException Wird von Methoden ausgelöst, die überprüfen, ob Argumente in einem angegebenen Bereich liegen.Thrown by methods that verify that arguments are in a given range. String s = "string";
s.Substring(s.Length+1);

Siehe auchSee also