CA2201 : Ne levez pas des types d'exceptions réservés

Propriété Value
Identificateur de la règle CA2201
Titre Ne levez pas des types d'exceptions réservés
Catégorie Utilisation
Le correctif est cassant ou non cassant Rupture
Activé par défaut dans .NET 8 Non

Cause

Une méthode lève un type d’exception trop général ou réservé par le runtime.

Description de la règle

Les types d’exceptions suivants sont trop généraux pour fournir suffisamment d’informations à l’utilisateur :

Les types d’exception suivants sont réservés et doivent être levés uniquement par le Common Language Runtime :

Ne pas lever d’exceptions générales

Si vous levez un type d’exception général, tel que Exception ou SystemException, dans une bibliothèque ou un framework, cela oblige les consommateurs à intercepter toutes les exceptions, y compris les exceptions inconnues qu’ils ne savent pas comment gérer.

Au lieu de cela, levez un type plus dérivé qui existe déjà dans le framework, ou créez votre propre type qui dérive de Exception.

Lever des exceptions spécifiques

Le tableau suivant indique l’exception à lever pour différents types d’arguments non valides, y compris le paramètre de valeur dans l’accesseur set d’une propriété.

Argument non valide Exception
Référence null ArgumentNullException
En dehors de la plage autorisée de valeurs (par exemple un index pour une collection ou une liste) ArgumentOutOfRangeException
Valeur enum non valide InvalidEnumArgumentException
Contient un format qui ne répond pas aux spécifications de paramètre d’une méthode (par exemple la chaîne de format pour ToString(String)) FormatException
Autrement non valide ArgumentException

Le tableau suivant indique l’exception à lever pour différents types d’opérations non valides.

Opération non valide Exception
L’opération n’est pas valide pour l’état actuel d’un objet. InvalidOperationException
L’opération est effectuée sur un objet qui a été supprimé. ObjectDisposedException
L’opération n’est pas prise en charge (comme par exemple dans une substitution de Stream.Write dans un flux ouvert pour lecture). NotSupportedException
La conversion entraînerait un dépassement de capacité (comme par exemple dans une surcharge d’opérateur de cast explicite). OverflowException

Pour toutes les autres situations, envisagez de créer et de lever votre propre type qui dérive de Exception.

Comment corriger les violations

Pour corriger une violation de cette règle, remplacez le type de l’exception levée par un type spécifique qui n’est pas l’un des types réservés.

Quand supprimer les avertissements

Ne supprimez aucun avertissement de cette règle.