CA1032 : Implémenter des constructeurs d'exception standard
Propriété | Value |
---|---|
Identificateur de la règle | CA1032 |
Titre | Implémenter des constructeurs d'exception standard |
Catégorie | Conception |
Le correctif est cassant ou non cassant | Sans rupture |
Activé par défaut dans .NET 8 | Non |
Cause
Un type étend System.Exception, mais ne déclare pas tous les constructeurs requis.
Description de la règle
Les types d’exception doivent implémenter les trois constructeurs publics suivants :
public NewException()
public NewException(string)
public NewException(string, Exception)
Ne pas fournir le jeu complet de constructeurs peut rendre difficile une gestion des exceptions correcte. Par exemple, le constructeur qui possède la signature NewException(string, Exception)
permet de créer des exceptions provoquées par d’autres exceptions. Sans ce constructeur, vous ne pouvez pas créer ni lever une instance de votre exception personnalisée qui contient une exception interne (imbriquée). Or, c’est ce que le code managé doit faire dans une telle situation.
Pour plus d’informations, consultez CA2229 : Implémenter des constructeurs de sérialisation.
Comment corriger les violations
Pour corriger une violation de cette règle, ajoutez les constructeurs manquants à l’exception et assurez-vous qu’ils disposent de l’accessibilité nécessaire.
Quand supprimer les avertissements
Vous pouvez sans risque supprimer un avertissement de cette règle lorsque la violation est provoquée par l’utilisation d’un autre niveau d’accès pour les constructeurs publics.
Supprimer un avertissement
Si vous voulez supprimer une seule violation, ajoutez des directives de préprocesseur à votre fichier source pour désactiver et réactiver la règle.
#pragma warning disable CA1032
// The code that's violating the rule is on this line.
#pragma warning restore CA1032
Pour désactiver la règle sur un fichier, un dossier ou un projet, définissez sa gravité sur none
dans le fichier de configuration.
[*.{cs,vb}]
dotnet_diagnostic.CA1032.severity = none
Pour plus d’informations, consultez Comment supprimer les avertissements de l’analyse de code.
Exemple
L’exemple suivant contient un type d’exception qui enfreint cette règle et un type d’exception correctement implémenté.
// Violates rule ImplementStandardExceptionConstructors.
public class BadException : Exception
{
public BadException()
{
// Add any type-specific logic, and supply the default message.
}
}
[Serializable()]
public class GoodException : Exception
{
public GoodException()
{
// Add any type-specific logic, and supply the default message.
}
public GoodException(string message) : base(message)
{
// Add any type-specific logic.
}
public GoodException(string message, Exception innerException) :
base(message, innerException)
{
// Add any type-specific logic for inner exceptions.
}
}