Remarque
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.
| Propriété | Valeur |
|---|---|
| Identificateur de la règle | CA2219 |
| Titre | Ne pas lever d'exceptions dans les clauses d'exception |
| Catégorie | Utilisation |
| Le correctif a un effet disruptif ou non disruptif | Non-cassant, Cassant |
| Activé par défaut dans .NET 10 | À titre de suggestion |
| Langues applicables | C# et Visual Basic |
Cause
Une exception est levée à partir d’un finally, d’une clause filter, ou d’une clause défaut.
Description de la règle
Lorsqu’une exception est levée dans une clause d’exception, cela augmente considérablement la difficulté du débogage.
Lorsqu’une exception est levée dans une clause finally ou fault, la nouvelle exception masque l’exception active, si elle est présente. Cela rend l’erreur d’origine dure à détecter et à déboguer.
Lorsqu’une exception est levée dans une clause filter, le runtime intercepte l’exception en mode silencieux et entraîne l’évaluation du filtre à la valeur false. Il n'existe aucune façon de faire la différence lorsque le filtre évalue à faux et lorsqu'une exception est lancée depuis un filtre. Cela rend difficile la détection et le débogage des erreurs dans la logique du filtre.
Comment corriger les violations
Pour corriger cette violation de la règle, ne levez pas explicitement d'exception depuis une clause finally, filter ou fault.
Example
try
{
// ...
}
finally
{
// This code violates the rule.
throw new Exception();
}
Quand supprimer les avertissements
Ne supprimez aucun avertissement de cette règle. Il n’existe aucun scénario dans lequel une exception levée dans une clause d’exception offre un avantage au code en cours d’exécution.
Règles associées
CA1065 : Ne pas lever d'exceptions dans les emplacements inattendus