CA1032: Implementujte standardní konstruktory výjimky

Vlastnost Hodnota
ID pravidla CA1032
Název Implementujte standardní konstruktory výjimky
Kategorie Návrh
Oprava způsobující chybu nebo chybu způsobující chybu Nenarušující
Povoleno ve výchozím nastavení v .NET 8 No

Příčina

Typ se rozšiřuje System.Exception , ale deklaruje všechny požadované konstruktory.

Popis pravidla

Typy výjimek musí implementovat následující tři veřejné konstruktory:

  • public NewException()

  • public NewException(string)

  • public NewException(řetězec, výjimka)

Není-li dodána úplná sada konstruktorů, může být obtížné správně ošetřit výjimky. Například konstruktor s podpisem NewException(string, Exception) slouží k vytvoření výjimek, které jsou způsobeny jinými výjimkami. Bez tohoto konstruktoru nemůžete vytvořit a vyvolat instanci vlastní výjimky, která obsahuje vnitřní (vnořenou) výjimku, což je to, co by měl spravovaný kód v takové situaci dělat.

Další informace naleznete v tématu CA2229: Implementace serializace konstruktory.

Jak opravit porušení

Chcete-li opravit porušení tohoto pravidla, přidejte chybějící konstruktory k výjimce a ujistěte se, že mají správnou přístupnost.

Kdy potlačit upozornění

Je bezpečné potlačit upozornění z tohoto pravidla, pokud je porušení způsobeno použitím jiné úrovně přístupu pro veřejné konstruktory.

Potlačení upozornění

Pokud chcete pouze potlačit jedno porušení, přidejte do zdrojového souboru direktivy preprocesoru, abyste pravidlo zakázali a znovu povolili.

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

Pokud chcete pravidlo pro soubor, složku nebo projekt zakázat, nastavte jeho závažnost v none konfiguračním souboru.

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

Další informace naleznete v tématu Jak potlačit upozornění analýzy kódu.

Příklad

Následující příklad obsahuje typ výjimky, který porušuje toto pravidlo a typ výjimky, který je správně implementován.

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

Viz také

CA2229: Implementovat serializační konstruktory