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 :
- System.AccessViolationException
- System.ExecutionEngineException
- System.IndexOutOfRangeException
- System.NullReferenceException
- System.OutOfMemoryException
- System.Runtime.InteropServices.COMException
- System.Runtime.InteropServices.ExternalException
- System.Runtime.InteropServices.SEHException
- System.StackOverflowException
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.