CA1032: Standardausnahmekonstruktoren implementieren.
Eigenschaft | Wert |
---|---|
Regel-ID | CA1032 |
Titel | Standardausnahmekonstruktoren implementieren. |
Kategorie | Design |
Fix führt oder führt nicht zur Unterbrechung | Nicht unterbrechend |
Standardmäßig in .NET 8 aktiviert | Nein |
Ursache
Ein Typ erweitert System.Exception, deklariert jedoch nicht alle erforderlichen Konstruktoren.
Regelbeschreibung
Alle Ausnahmetypen müssen die folgenden drei öffentlichen Konstruktoren implementieren:
public NewException()
public NewException(string)
public NewException(string, Exception)
Falls nicht der vollständige Satz von Konstruktoren angegeben wird, wird eine ordnungsgemäße Behandlung von Ausnahmen unter Umständen erschwert. Der Konstruktor mit der Signatur NewException(string, Exception)
wird beispielsweise verwendet, um Ausnahmen zu erstellen, die durch andere Ausnahmen verursacht werden. Ohne diesen Konstruktor können Sie keine Instanz Ihrer benutzerdefinierten Ausnahme erstellen und auslösen, die eine innere (geschachtelte) Ausnahme enthält. Und diese Funktion sollte verwalteter Code in einer solchen Situation erfüllen.
Weitere Informationen finden Sie unter CA2229: Serialisierung implementieren.
Behandeln von Verstößen
Um einen Verstoß gegen diese Regel zu beheben, fügen Sie der Ausnahme die fehlenden Konstruktoren hinzu, und stellen Sie sicher, dass darauf korrekt zugegriffen werden kann.
Wann sollten Warnungen unterdrückt werden?
Eine Warnung dieser Regel kann unterdrückt werden, wenn der Verstoß durch die Nutzung einer anderen Zugriffsebene für öffentliche Konstruktoren verursacht wird.
Unterdrücken einer Warnung
Um nur eine einzelne Verletzung zu unterdrücken, fügen Sie der Quelldatei Präprozessoranweisungen hinzu, um die Regel zu deaktivieren und dann wieder zu aktivieren.
#pragma warning disable CA1032
// The code that's violating the rule is on this line.
#pragma warning restore CA1032
Um die Regel für eine Datei, einen Ordner oder ein Projekt zu deaktivieren, legen Sie den Schweregrad in der Konfigurationsdatei auf none
fest.
[*.{cs,vb}]
dotnet_diagnostic.CA1032.severity = none
Weitere Informationen finden Sie unter Vorgehensweise: Unterdrücken von Codeanalyse-Warnungen.
Beispiel
Das folgende Beispiel enthält einen Ausnahmetyp, der gegen diese Regel verstößt, und einen Ausnahmetyp, der ordnungsgemäß implementiert wird.
// 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.
}
}