Undersøg undtagelser, der er genereret af compiler
- 10 minutter
Undtagelser genereres af .NET-kørslen eller af kode i et program. Undtagelsestypen afhænger af den kode, der forårsager undtagelsen.
Undtagelser, der er genereret af compiler
.NET-runtime udløser undtagelser, når grundlæggende handlinger mislykkes. Her er en kort liste over kørselsundtagelser og deres fejlbetingelser:
-
ArrayTypeMismatchException: Udløst, når en matrix ikke kan gemme et givet element, fordi elementets faktiske type ikke er kompatibel med matrixens faktiske type. -
DivideByZeroException: Udløst, når der gøres forsøg på at dividere en integralværdi med nul. -
FormatException: Udløst, når formatet af et argument er ugyldigt. -
IndexOutOfRangeException: Udløst, når der gøres forsøg på at indeksere en matrix, når indekset er mindre end nul eller uden for matrixens grænser. -
InvalidCastException: Udløst, når en eksplicit konvertering fra en basistype til en grænseflade eller til en afledt type mislykkes på kørselstidspunktet. -
NullReferenceException: Udløst, når der gøres forsøg på at referere til et objekt, hvis værdi er null. -
OverflowException: Udløst, når en aritmetisk handling i et kontrolleret kontekstoverløb.
Kodeeksempler for compileroprettede undtagelser
Følgende kodeeksempler viser et eksempel på den kode, der forårsager en compilergenereret undtagelse.
ArrayTypeMismatchException
Der udløses en undtagelse af typen ArrayTypeMismatchException , når der gøres forsøg på at gemme et element af den forkerte type i en matrix. Følgende eksempel udløser en ArrayTypeMismatchException undtagelse, når du forsøger at gemme en numerisk værdi i en strengmatrix.
string[] names = { "Dog", "Cat", "Fish" };
Object[] objs = (Object[])names;
Object obj = (Object)13;
objs[2] = obj; // ArrayTypeMismatchException occurs
DivideByZeroException
Der forekommer en undtagelse af typen DivideByZeroException , når du forsøger at dividere et heltal eller et decimaltal med nul. I følgende eksempel udløses der en DivideByZeroException undtagelse, når der udføres division med heltal.
int number1 = 3000;
int number2 = 0;
Console.WriteLine(number1 / number2); // DivideByZeroException occurs
Seddel
Hvis du dividerer en værdi med et flydende tal med nul, udløses der ikke en undtagelse. det resulterer i positiv uendelighed, negativ uendelighed eller ikke et tal (NaN) i henhold til reglerne i IEEE 754 aritmetik.
FormatException
Der forekommer en undtagelse af typen FormatException , når formatet af et argument er ugyldigt, eller når en sammensat formatstreng ikke er korrekt udformet. I følgende eksempel udløses der en FormatException undtagelse, når du forsøger at konvertere en streng til et heltal.
int valueEntered;
string userValue = "two";
valueEntered = int.Parse(userValue); // FormatException occurs
IndexOutOfRangeException
Der udløses en undtagelse af typen IndexOutOfRangeException , når der gøres forsøg på at få adgang til et element i en matrix eller samling med et indeks, der er uden for dets grænser. I følgende eksempel udløses der en IndexOutOfRangeException undtagelse, når du forsøger at tildele det sidste element i matrixen values1 til det sidste element i matrixen values2 .
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
Der udløses en undtagelse af typen InvalidCastException under forsøg på en ugyldig casting eller eksplicit konvertering. I følgende eksempel udløses en InvalidCastException , når du forsøger at konvertere en object typestreng til en int variabel.
object obj = "This is a string";
int num = (int)obj;
NullReferenceException
Der udløses en undtagelse af typen NullReferenceException , når du forsøger at få adgang til et medlem på en type, hvis værdi er null. Der vises to eksempler. I det første eksempel udløses en NullReferenceException , når der forsøges at få adgang til et element i en null-matrix. I det andet eksempel vises en NullReferenceException , når du forsøger at få adgang til en metode for en null-streng.
int[] values = null;
for (int i = 0; i <= 9; i++)
values[i] = i * 2;
string? lowCaseString = null;
Console.WriteLine(lowCaseString.ToUpper());
OverflowUndtagelse
Der forekommer en undtagelse af typen OverflowException , når en aritmetisk handling forsøger at tildele et resultat, der er uden for intervallet for destinationsdatatypen. I følgende eksempel udløses der en OverflowException undtagelse, når du forsøger at konvertere en decimal værdi på 400 til en byte variabel.
decimal x = 400;
byte i;
i = (byte)x; // OverflowException occurs
Console.WriteLine(i);
Resumé
Her er et par vigtige ting, du skal huske fra dette undermodul:
- .NET-runtime udløser en undtagelse, når en handling mislykkes.
- Undtagelsestypen afhænger af den kode, der forårsager undtagelsen.
- Dit program skal registrere kørselsundtagelser.