Freigeben über


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

Weitere Informationen

CA2229: Serialisierungskonstruktoren implementieren.