Gestion et levée d’exceptions dans .NET

Les applications doivent pouvoir gérer de manière cohérente les erreurs qui se produisent au moment de l'exécution. .NET fournit un modèle pour avertir les applications de façon uniforme de la présence d’erreurs : les opérations .NET indiquent un échec en levant des exceptions.

Exceptions

Une exception est une condition d'erreur ou un comportement inattendu rencontré par un programme en cours d'exécution. Les exceptions peuvent être levées à cause d’une erreur dans votre code ou dans le code que vous appelez (une bibliothèque partagée, par exemple), de ressources de système d’exploitation non disponibles, de conditions inattendues rencontrées par le runtime (du code qui ne peut pas être vérifié, par exemple), etc. Votre application peut récupérer suite à certaines de ces conditions, mais pas toutes. Bien que vous puissiez récupérer suite à la plupart des exceptions d'application, vous ne pouvez pas récupérer suite à la plupart des exceptions runtime.

Dans .NET, une exception est un objet qui hérite de la classe System.Exception. Une exception est levée à partir d'une partie du code où un problème s'est produit. L'exception remonte la pile jusqu'à sa prise en charge par l'application ou l'arrêt du programme.

Exceptions et méthodes traditionnelles de gestion des erreurs

Traditionnellement, le modèle de gestion des erreurs d'un langage reposait soit sur le mode unique utilisé par le langage en question pour détecter des erreurs et leur trouver des gestionnaires appropriés, soit sur le mécanisme de gestion des erreurs fourni par le système d'exploitation. La façon dont .NET implémente la gestion des exceptions offre les avantages suivants :

  • La gestion et la levée des exceptions fonctionne de la même façon pour les langages de programmation .NET.

  • ne requiert aucune syntaxe particulière pour la gestion des exceptions, mais laisse chaque langage définir sa propre syntaxe.

  • Les exceptions peuvent être levées au-delà des limites des processus et même des ordinateurs.

  • Un code de gestion des exceptions peut être ajouté à une application pour augmenter la fiabilité du programme.

Les exceptions offrent des avantages par rapport à d’autres méthodes de notification des erreurs, comme les codes de retour. Les erreurs ne passent pas inaperçues, car si une exception est levée et que vous ne la gérez pas, le runtime arrête votre application. Les valeurs non valides ne continuent pas à se propager dans le système parce que du code n’a pas pu vérifier un code de retour d’échec.

Exceptions courantes

Le tableau suivant répertorie certaines exceptions courantes avec des exemples de cause possible.

Type d'exception Description Exemple
Exception Classe de base pour toutes les exceptions. Aucun (utilisez une classe dérivée de cette exception).
IndexOutOfRangeException Levée par le runtime uniquement en cas d’indexation incorrecte du tableau. Indexation d’un tableau en dehors de sa plage valide :
arr[arr.Length+1]
NullReferenceException Levée par le runtime uniquement si un objet Null est référencé. object o = null;
o.ToString();
InvalidOperationException Levée par les méthodes en cas d’état non valide. Appel de Enumerator.MoveNext() après la suppression d’un élément de la collection sous-jacente.
ArgumentException Classe de base pour toutes les exceptions d’argument. Aucun (utilisez une classe dérivée de cette exception).
ArgumentNullException Levée par les méthodes qui n’acceptent pas la valeur Null pour un argument. String s = null;
"Calculate".IndexOf(s);
ArgumentOutOfRangeException Levée par les méthodes qui vérifient que les arguments sont inclus dans une plage donnée. String s = "string";
s.Substring(s.Length+1);

Voir aussi