Examiner les exceptions générées par le compilateur
- 10 minutes
Les exceptions sont générées par le runtime .NET ou par du code dans un programme. Le type d’exception dépend du code qui provoque l’exception.
Exceptions générées par le compilateur
Le runtime .NET lève des exceptions lorsque les opérations de base échouent. Voici une courte liste des exceptions d’exécution et de leurs conditions d’erreur :
ArrayTypeMismatchException: levée lorsqu’un tableau ne peut pas stocker un élément donné, car le type réel de l’élément est incompatible avec le type réel du tableau.DivideByZeroException: levée lorsqu’une tentative est effectuée pour diviser une valeur intégrale par zéro.FormatException: levée lorsque le format d’un argument n’est pas valide.IndexOutOfRangeException: levée lorsqu’une tentative est effectuée pour indexer un tableau lorsque l’index est inférieur à zéro ou en dehors des limites du tableau.InvalidCastException: levée lorsqu’une conversion explicite d’un type de base vers une interface ou vers un type dérivé échoue au moment de l’exécution.NullReferenceException: levée lorsqu’une tentative est effectuée pour référencer un objet dont la valeur est Null.OverflowException: Levée quand une opération dans un contexte checked engendre un dépassement.
Exemples de code pour les exceptions générées par le compilateur
Les exemples de code suivants montrent un exemple de code qui provoque une exception générée par le compilateur.
ArrayTypeMismatchException
Une exception de type ArrayTypeMismatchException est levée lorsqu’une tentative est effectuée pour stocker un élément du type incorrect dans un tableau. L’exemple suivant lève une ArrayTypeMismatchException exception lors de la tentative de stocker une valeur numérique dans un tableau de chaînes.
string[] names = { "Dog", "Cat", "Fish" };
Object[] objs = (Object[])names;
Object obj = (Object)13;
objs[2] = obj; // ArrayTypeMismatchException occurs
DivideByZeroException
Une exception de type DivideByZeroException se produit lors de la tentative de diviser un entier ou un nombre décimal par zéro. L’exemple suivant lève une DivideByZeroException exception lors de l’exécution d’une division entière.
int number1 = 3000;
int number2 = 0;
Console.WriteLine(number1 / number2); // DivideByZeroException occurs
Remarque
La division d’une valeur à virgule flottante par zéro ne lève pas d’exception ; elle résulte en l’infini positif, l’infini négatif ou pas un nombre (NaN), selon les règles de l'arithmétique IEEE 754.
FormatException
Une exception de type FormatException se produit lorsque le format d’un argument n’est pas valide ou lorsqu’une chaîne de format composite n’est pas bien formée. L’exemple suivant lève une FormatException exception lors de la tentative de conversion d’une chaîne en entier.
int valueEntered;
string userValue = "two";
valueEntered = int.Parse(userValue); // FormatException occurs
IndexOutOfRangeException
Une exception de type IndexOutOfRangeException est levée lorsqu'on tente d'accéder à un élément d'un tableau ou d'une collection avec un index qui dépasse ses limites. L’exemple suivant lève une IndexOutOfRangeException exception lorsque vous tentez d’affecter le dernier élément du values1 tableau au dernier élément du values2 tableau.
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
Une exception de type InvalidCastException est levée lors d’une tentative de casting ou de conversion explicite non valide. L’exemple suivant lève une InvalidCastException lors de la tentative de conversion d’un object de type chaîne en variable int.
object obj = "This is a string";
int num = (int)obj;
NullReferenceException
Une exception de type NullReferenceException est levée lors de la tentative d’accès à un membre sur un type dont la valeur est null. Deux exemples sont présentés. Dans le premier exemple, une NullReferenceException est levée lors de la tentative d’accès à un élément d’un tableau null. Le deuxième exemple lève un NullReferenceException lorsqu'on tente d'accéder à une méthode d’une chaîne nulle.
int[] values = null;
for (int i = 0; i <= 9; i++)
values[i] = i * 2;
string? lowCaseString = null;
Console.WriteLine(lowCaseString.ToUpper());
OverflowException
Une exception de type OverflowException se produit lorsqu’une opération arithmétique tente d’affecter un résultat qui se trouve en dehors de la plage du type de données cible. L’exemple suivant lève une OverflowException exception lors de la tentative de conversion d’une decimal valeur de 400 en variable byte .
decimal x = 400;
byte i;
i = (byte)x; // OverflowException occurs
Console.WriteLine(i);
Récapitulatif
Voici quelques points importants à retenir de cette unité :
- Le runtime .NET lève une exception lorsqu’une opération échoue.
- Le type d’exception dépend du code qui provoque l’exception.
- Votre application doit intercepter les exceptions d’exécution.
Vérifier vos connaissances
Commentaires
Cette page a-t-elle été utile ?
No
Vous avez besoin d’aide pour cette rubrique ?
Vous souhaitez essayer d’utiliser Ask Learn pour clarifier ou vous guider dans cette rubrique ?