Examinați excepțiile generate de compilator
- 10 minute
Excepțiile sunt generate de modulul runtime .NET sau de codul dintr-un program. Tipul de excepție depinde de codul care provoacă excepția.
Excepții generate de compilator
Modulul runtime .NET generează excepții atunci când operațiunile de bază nu reușesc. Iată o listă scurtă de excepții la momentul rulării și condițiile lor de eroare:
-
ArrayTypeMismatchException: Produs atunci când o matrice nu poate stoca un element dat, deoarece tipul real al elementului este incompatibil cu tipul real al matricei. -
DivideByZeroException: S-a produs atunci când se încearcă împărțirea unei valori integrale la zero. -
FormatException: Generat atunci când formatul unui argument nu este valid. -
IndexOutOfRangeException: Produs atunci când se încearcă indexarea unei matrice atunci când indexul este mai mic decât zero sau în afara limitelor matricei. -
InvalidCastException: Produs atunci când o conversie explicită de la un tip de bază la o interfață sau la un tip derivat nu reușește la momentul rulării. -
NullReferenceException: Produs atunci când se face o încercare de a face referire la un obiect a cărui valoare este nulă. -
OverflowException: Produs atunci când o operațiune aritmetică într-un context verificat depășește.
Eșantioane de cod pentru excepții generate de compilator
Următoarele exemple de cod arată un exemplu de cod care provoacă o excepție generată de compilator.
ArrayTypeMismatchException
S-a produs o excepție de tip ArrayTypeMismatchException atunci când se încearcă stocarea unui element de tip greșit într-o matrice. Următorul exemplu generează o ArrayTypeMismatchException excepție atunci când încercați să stocați o valoare numerică într-o matrice de șiruri.
string[] names = { "Dog", "Cat", "Fish" };
Object[] objs = (Object[])names;
Object obj = (Object)13;
objs[2] = obj; // ArrayTypeMismatchException occurs
DivideByZeroException
Excepție de tip DivideByZeroException apare atunci când încercați să împărțiți un număr întreg sau un număr zecimal la zero. Următorul exemplu generează o DivideByZeroException excepție la efectuarea împărțirii numerelor întregi.
int number1 = 3000;
int number2 = 0;
Console.WriteLine(number1 / number2); // DivideByZeroException occurs
Notă
Împărțirea unei valori în virgulă mobilă la zero nu aruncă o excepție; are ca rezultat infinit pozitiv, infinit negativ sau nu un număr (NaN), în conformitate cu regulile de IEEE 754 aritmetice.
FormatareExcepție
O excepție de tip FormatException apare atunci când formatul unui argument nu este valid sau când un șir de formatare compus nu este corect formatat. Următorul exemplu generează o FormatException excepție atunci când încercați să efectuați conversia unui șir într-un întreg.
int valueEntered;
string userValue = "two";
valueEntered = int.Parse(userValue); // FormatException occurs
IndexOutOfRangeException
S-a produs o excepție de tip IndexOutOfRangeException atunci când se încearcă accesarea unui element dintr-o matrice sau dintr-o colecție cu un index care se află în afara limitelor sale. Următorul exemplu generează o IndexOutOfRangeException excepție atunci când încercați să atribuiți ultimul element al values1 matricei la ultimul element al matricei 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
S-a produs o excepție de tip InvalidCastException la încercarea de conversie nevalidă sau explicită. Următorul exemplu generează un InvalidCastException atunci când se încearcă difuzarea unui object șir de tip într-o int variabilă.
object obj = "This is a string";
int num = (int)obj;
NullReferenceException
S-a produs o excepție de tip NullReferenceException atunci când se încearcă accesarea unui membru pe un tip a cărui valoare este nulă. Sunt afișate două exemple. În primul exemplu, se găsește o NullReferenceException eroare la încercarea de a accesa un element dintr-o matrice nulă. Al doilea exemplu generează un NullReferenceException atunci când se încearcă accesarea unei metode a unui șir nul.
int[] values = null;
for (int i = 0; i <= 9; i++)
values[i] = i * 2;
string? lowCaseString = null;
Console.WriteLine(lowCaseString.ToUpper());
DepășireExcepție
O excepție de tip OverflowException apare atunci când o operațiune aritmetică încearcă să atribuie un rezultat care se află în afara intervalului tipului de date țintă. Următorul exemplu generează o OverflowException excepție atunci când se încearcă conversia unei decimal valori de 400 într-o byte variabilă.
decimal x = 400;
byte i;
i = (byte)x; // OverflowException occurs
Console.WriteLine(i);
Recapitula
Iată câteva lucruri importante de reținut din această unitate:
- Modulul runtime .NET generează o excepție atunci când o operațiune nu reușește.
- Tipul de excepție depinde de codul care provoacă excepția.
- Aplicația dvs. ar trebui să prindă excepții la momentul rulării.