CA2219 : Ne pas lever d'exceptions dans les clauses d'exception

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.

CA1065 : Ne pas lever d'exceptions dans les emplacements inattendus

Voir aussi