Untersuchen der vom Compiler generierten Ausnahmen
- 10 Minuten
Ausnahmen werden von der .NET-Laufzeit oder von Code in einem Programm generiert. Der Ausnahmetyp ist vom Code abhängig, der die Ausnahme verursacht.
Vom Compiler generierte Ausnahmen
Die .NET-Laufzeit löst Ausnahmen aus, wenn grundlegende Vorgänge fehlschlagen. Hier ist eine kurze Liste der Laufzeit-Ausnahmen und deren Fehlerbedingungen:
ArrayTypeMismatchException: Wird ausgelöst, wenn ein Array ein bestimmtes Element nicht speichern kann, da der tatsächliche Typ des Elements nicht mit dem tatsächlichen Typ des Arrays kompatibel ist.DivideByZeroException: Wird ausgelöst, wenn versucht wird, einen integralen Wert durch Null zu dividieren.FormatException: Wird ausgelöst, wenn das Format eines Arguments ungültig ist.IndexOutOfRangeException: Wird ausgelöst, wenn versucht wird, ein Array zu indizieren, wenn der Index kleiner als Null oder außerhalb der Grenzen des Arrays ist.InvalidCastException: Wird ausgelöst, wenn eine explizite Konvertierung von einem Basistyp zu einer Schnittstelle oder zu einem abgeleiteten Typ zur Laufzeit fehlschlägt.NullReferenceException: Wird ausgelöst, wenn versucht wird, auf ein Objekt zu verweisen, dessen Wert null ist.OverflowException: Wird ausgelöst, wenn eine arithmetische Operation in einem geprüften Kontext zu einem Überlauf führt.
Codebeispiele für compilergenerierte Ausnahmen
Die folgenden Codebeispiele zeigen ein Beispiel für den Code, der eine vom Compiler generierte Ausnahme verursacht.
ArrayTypeMismatchException
Eine Ausnahme vom Typ ArrayTypeMismatchException wird ausgelöst, wenn versucht wird, ein Element des falschen Typs innerhalb eines Arrays zu speichern. Im folgenden Beispiel wird beim Versuch, einen numerischen Wert in einem Zeichenfolgenarray zu speichern, eine ArrayTypeMismatchException Ausnahme ausgelöst.
string[] names = { "Dog", "Cat", "Fish" };
Object[] objs = (Object[])names;
Object obj = (Object)13;
objs[2] = obj; // ArrayTypeMismatchException occurs
DivideByZeroException
Eine Ausnahme des Typs DivideByZeroException tritt auf, wenn versucht wird, eine ganze Zahl oder eine Dezimalzahl durch Null zu dividieren. Im folgenden Beispiel wird beim Ausführen einer ganzzahligen Division eine DivideByZeroException Ausnahme ausgelöst.
int number1 = 3000;
int number2 = 0;
Console.WriteLine(number1 / number2); // DivideByZeroException occurs
Hinweis
Das Dividieren eines Gleitkommawerts durch Null löst keine Ausnahme aus. sie führt nach den Regeln von IEEE 754 Arithmetik zu einer positiven Unendlichkeit, einer negativen Unendlichkeit oder nicht zu einer Zahl (NaN).
FormatException
Eine Ausnahme des Typs FormatException tritt auf, wenn das Format eines Arguments ungültig ist oder eine zusammengesetzte Formatzeichenfolge nicht wohlgeformt ist. Im folgenden Beispiel wird beim Versuch, eine Zeichenfolge in eine ganze Zahl zu konvertieren, eine FormatException Ausnahme ausgelöst.
int valueEntered;
string userValue = "two";
valueEntered = int.Parse(userValue); // FormatException occurs
IndexOutOfRangeException
Eine Ausnahme des Typs IndexOutOfRangeException wird ausgelöst, wenn versucht wird, auf ein Element eines Arrays oder einer Auflistung mit einem Index zuzugreifen, der sich außerhalb seiner Grenzen befindet. Im folgenden Beispiel wird beim Versuch, das letzte Element des IndexOutOfRangeException Arrays dem letzten Element des values1 Arrays zuzuweisen, eine values2 Ausnahme ausgelöst.
int[] values1 = { 3, 6, 9, 12, 15, 18, 21 };
int[] values2 = new int[6];
values2[values1.Length - 1] = values1[values1.Length - 1]; // IndexOutOfRangeException occurs
InvalidCastException
Eine Ausnahme des Typs InvalidCastException wird bei dem Versuch ausgelöst, eine ungültige Umwandlung oder eine explizite Konvertierung durchzuführen. Das folgende Beispiel löst einen InvalidCastException aus, wenn versucht wird, ein object des Typs „Zeichenfolge“ in eine int-Variable umzuwandeln.
object obj = "This is a string";
int num = (int)obj;
NullReferenceException
Eine Ausnahme des Typs NullReferenceException wird ausgelöst, wenn versucht wird, auf ein Element eines Typs zuzugreifen, dessen Wert null ist. Es werden zwei Beispiele gezeigt. Im ersten Beispiel wird ein NullReferenceException ausgelöst, wenn versucht wird, auf ein Element eines Null-Arrays zuzugreifen. Im zweiten Beispiel wird ein NullReferenceException Fehler ausgelöst, wenn versucht wird, auf eine Methode einer NULL-Zeichenfolge zuzugreifen.
int[] values = null;
for (int i = 0; i <= 9; i++)
values[i] = i * 2;
string? lowCaseString = null;
Console.WriteLine(lowCaseString.ToUpper());
OverflowException
Eine Ausnahme des Typs OverflowException tritt auf, wenn ein arithmetischer Vorgang versucht, ein Ergebnis außerhalb des Bereichs des Zieldatentyps zuzuweisen. Im folgenden Beispiel wird beim Versuch, einen OverflowException Wert von 400 in eine decimal Variable zu konvertieren, eine byte Ausnahme ausgelöst.
decimal x = 400;
byte i;
i = (byte)x; // OverflowException occurs
Console.WriteLine(i);
Rekapitulation
Nachstehend finden Sie nochmals die wichtigsten Punkte aus dieser Lerneinheit:
- Die .NET-Laufzeit löst eine Ausnahme aus, wenn ein Vorgang fehlschlägt.
- Der Ausnahmetyp ist vom Code abhängig, der die Ausnahme verursacht.
- Ihre Anwendung sollte Laufzeitausnahmen abfangen.
Überprüfen Sie Ihr Wissen
Feedback
War diese Seite hilfreich?
No
Benötigen Sie Hilfe zu diesem Thema?
Möchten Sie versuchen, Ask Learn zu verwenden, um Sie durch dieses Thema zu klären oder zu leiten?