Gestion et levée d’exceptions dans .NETHandling and throwing exceptions in .NET

Les applications doivent pouvoir gérer de manière cohérente les erreurs qui se produisent au moment de l'exécution.Applications must be able to handle errors that occur during execution in a consistent manner. .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..NET provides a model for notifying applications of errors in a uniform way: .NET operations indicate failure by throwing exceptions.

ExceptionsExceptions

Une exception est une condition d'erreur ou un comportement inattendu rencontré par un programme en cours d'exécution.An exception is any error condition or unexpected behavior that is encountered by an executing program. 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.Exceptions can be thrown because of a fault in your code or in code that you call (such as a shared library), unavailable operating system resources, unexpected conditions that the runtime encounters (such as code that can't be verified), and so on. Votre application peut récupérer suite à certaines de ces conditions, mais pas toutes.Your application can recover from some of these conditions, but not from others. 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.Although you can recover from most application exceptions, you can't recover from most runtime exceptions.

Dans .NET, une exception est un objet qui hérite de la classe System.Exception.In .NET, an exception is an object that inherits from the System.Exception class. Une exception est levée à partir d'une partie du code où un problème s'est produit.An exception is thrown from an area of code where a problem has occurred. L'exception remonte la pile jusqu'à sa prise en charge par l'application ou l'arrêt du programme.The exception is passed up the stack until the application handles it or the program terminates.

Exceptions et méthodes traditionnelles de gestion des erreursExceptions vs. traditional error-handling methods

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.Traditionally, a language's error-handling model relied on either the language's unique way of detecting errors and locating handlers for them, or on the error-handling mechanism provided by the operating system. La façon dont .NET implémente la gestion des exceptions offre les avantages suivants :The way .NET implements exception handling provides the following advantages:

  • La gestion et la levée des exceptions fonctionne de la même façon pour les langages de programmation .NET.Exception throwing and handling works the same for .NET programming languages.

  • ne requiert aucune syntaxe particulière pour la gestion des exceptions, mais laisse chaque langage définir sa propre syntaxe.Doesn't require any particular language syntax for handling exceptions, but allows each language to define its own syntax.

  • Les exceptions peuvent être levées au-delà des limites des processus et même des ordinateurs.Exceptions can be thrown across process and even machine boundaries.

  • Un code de gestion des exceptions peut être ajouté à une application pour augmenter la fiabilité du programme.Exception-handling code can be added to an application to increase program reliability.

Les exceptions offrent des avantages par rapport à d’autres méthodes de notification des erreurs, comme les codes de retour.Exceptions offer advantages over other methods of error notification, such as return codes. 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.Failures don't go unnoticed because if an exception is thrown and you don't handle it, the runtime terminates your 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.Invalid values don't continue to propagate through the system as a result of code that fails to check for a failure return code.

Exceptions courantesCommon exceptions

Le tableau suivant répertorie certaines exceptions courantes avec des exemples de cause possible.The following table lists some common exceptions with examples of what can cause them.

Type d'exceptionException type DescriptionDescription ExempleExample
Exception Classe de base pour toutes les exceptions.Base class for all exceptions. Aucun (utilisez une classe dérivée de cette exception).None (use a derived class of this exception).
IndexOutOfRangeException Levée par le runtime uniquement en cas d’indexation incorrecte du tableau.Thrown by the runtime only when an array is indexed improperly. Indexation d’un tableau en dehors de sa plage valide :Indexing an array outside its valid range:
arr[arr.Length+1]
NullReferenceException Levée par le runtime uniquement si un objet Null est référencé.Thrown by the runtime only when a null object is referenced. object o = null;
o.ToString();
InvalidOperationException Levée par les méthodes en cas d’état non valide.Thrown by methods when in an invalid state. Appel de Enumerator.MoveNext() après la suppression d’un élément de la collection sous-jacente.Calling Enumerator.MoveNext() after removing an item from the underlying collection.
ArgumentException Classe de base pour toutes les exceptions d’argument.Base class for all argument exceptions. Aucun (utilisez une classe dérivée de cette exception).None (use a derived class of this exception).
ArgumentNullException Levée par les méthodes qui n’acceptent pas la valeur Null pour un argument.Thrown by methods that do not allow an argument to be null. 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.Thrown by methods that verify that arguments are in a given range. String s = "string";
s.Substring(s.Length+1);

Voir aussiSee also