Share via


CA1032: Implementera standardfelkonstruktorer

Property Värde
Regel-ID CA1032
Rubrik Implementera standardfelkonstruktorer
Kategori Designa
Korrigeringen är icke-bakåtkompatibel Icke-icke-bryta
Aktiverad som standard i .NET 8 Nej

Orsak

En typ utökas System.Exception men deklarerar inte alla nödvändiga konstruktorer.

Regelbeskrivning

Undantagstyper måste implementera följande tre offentliga konstruktorer:

  • public NewException()

  • public NewException(string)

  • public NewException(string, Exception)

Om det inte finns någon fullständig uppsättning konstruktorer kan det vara svårt att hantera undantag på rätt sätt. Konstruktorn som har signaturen NewException(string, Exception) används till exempel för att skapa undantag som orsakas av andra undantag. Utan den här konstruktorn kan du inte skapa och utlösa en instans av ditt anpassade undantag som innehåller ett inre (kapslat) undantag, vilket är vad hanterad kod ska göra i en sådan situation.

Mer information finns i CA2229: Implementera serialiseringskonstruktorer.

Så här åtgärdar du överträdelser

Om du vill åtgärda ett brott mot den här regeln lägger du till de konstruktorer som saknas i undantaget och kontrollerar att de har rätt tillgänglighet.

När du ska ignorera varningar

Det är säkert att ignorera en varning från den här regeln när överträdelsen orsakas av en annan åtkomstnivå för de offentliga konstruktörerna.

Ignorera en varning

Om du bara vill förhindra en enda överträdelse lägger du till förprocessordirektiv i källfilen för att inaktivera och aktiverar sedan regeln igen.

#pragma warning disable CA1032
// The code that's violating the rule is on this line.
#pragma warning restore CA1032

Om du vill inaktivera regeln för en fil, mapp eller ett projekt anger du dess allvarlighetsgrad till none i konfigurationsfilen.

[*.{cs,vb}]
dotnet_diagnostic.CA1032.severity = none

Mer information finns i Så här utelämnar du kodanalysvarningar.

Exempel

Följande exempel innehåller en undantagstyp som bryter mot den här regeln och en undantagstyp som är korrekt implementerad.

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

Se även

CA2229: Implementera serialiseringskonstruktorer