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