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.
    }
}

Voir aussi

CA2229 : Implémentez des constructeurs de sérialisation