Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Les fonctionnalités de gestion des exceptions du langage C# vous aident à gérer les situations inattendues ou exceptionnelles qui se produisent lorsqu’un programme est en cours d’exécution. La gestion des exceptions utilise les try
mots clés , catch
et finally
les mots clés pour essayer des actions qui peuvent ne pas réussir, pour gérer les défaillances lorsque vous décidez qu’il est raisonnable de le faire et de nettoyer les ressources par la suite. Les exceptions peuvent être générées par le Common Language Runtime (CLR), par les bibliothèques .NET ou tierces, ou par code d’application. Les exceptions sont créées à l’aide du throw
mot clé.
Dans de nombreux cas, une exception peut être levée non par une méthode que votre code a appelée directement, mais par une autre méthode plus bas dans la pile des appels. Lorsqu’une exception est levée, le CLR décompresse la pile, en recherchant une méthode avec un catch
bloc pour le type d’exception spécifique, et exécute le premier catch
bloc trouvé. S’il ne trouve aucun bloc approprié catch
n’importe où dans la pile des appels, il met fin au processus et affiche un message à l’utilisateur.
Dans cet exemple, une méthode teste la division par zéro et intercepte l’erreur. Sans la gestion des exceptions, ce programme se termine par une erreur DivideByZeroException .
public class ExceptionTest
{
static double SafeDivision(double x, double y)
{
if (y == 0)
throw new DivideByZeroException();
return x / y;
}
public static void Main()
{
// Input for test purposes. Change the values to see
// exception handling behavior.
double a = 98, b = 0;
double result;
try
{
result = SafeDivision(a, b);
Console.WriteLine($"{a} divided by {b} = {result}");
}
catch (DivideByZeroException)
{
Console.WriteLine("Attempted divide by zero.");
}
}
}
Vue d’ensemble des exceptions
Les exceptions ont les propriétés suivantes :
- Les exceptions sont des types qui dérivent
System.Exception
de . - Utilisez un
try
bloc autour des instructions susceptibles de lever des exceptions. - Une fois qu’une exception se produit dans le
try
bloc, le flux de contrôle passe au premier gestionnaire d’exceptions associé présent n’importe où dans la pile des appels. En C#, lecatch
mot clé est utilisé pour définir un gestionnaire d’exceptions. - Si aucun gestionnaire d’exceptions pour une exception donnée n’est présent, le programme cesse d’exécuter avec un message d’erreur.
- N’interceptez pas d’exception, sauf si vous pouvez la gérer et laisser l’application dans un état connu. Si vous interceptez
System.Exception
, réexpédiez-le à l’aide duthrow
mot clé à la fin ducatch
bloc. - Si un bloc définit une
catch
variable d’exception, vous pouvez l’utiliser pour obtenir plus d’informations sur le type d’exception qui s’est produit. - Les exceptions peuvent être générées explicitement par un programme à l’aide du
throw
mot clé. - Les objets d’exception contiennent des informations détaillées sur l’erreur, telles que l’état de la pile des appels et une description textuelle de l’erreur.
- Le code d’un
finally
bloc est exécuté indépendamment de la levée d’une exception. Utilisez unfinally
bloc pour libérer des ressources, par exemple pour fermer les flux ou fichiers ouverts dans letry
bloc. - Les exceptions managées dans .NET sont implémentées au-dessus du mécanisme de gestion des exceptions structurées Win32. Pour plus d’informations, consultez Gestion des exceptions structurées (C/C++) et Cours d’incident sur les profondeurs de la gestion des exceptions structurées Win32.
Spécification du langage C#
Pour plus d’informations, consultez Exceptions dans la spécification du langage C#. La spécification du langage est la source de référence pour la syntaxe C# et son utilisation.