CA1032: Implementera standardfelkonstruktorer
Property | Värde |
---|---|
Regel-ID | CA1032 |
Title | Implementera standardfelkonstruktorer |
Kategori | Designa |
Korrigeringen är icke-bakåtkompatibel | Icke-icke-bryta |
Aktiverad som standard i .NET 9 | 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.
}
}