Udostępnij za pośrednictwem


CA1032: Implementowanie standardowych konstruktorów wyjątków

Właściwości Wartość
Identyfikator reguły CA1032
Stanowisko Zaimplementuj standardowe konstruktory wyjątków
Kategoria Projekt
Poprawka powodująca niezgodność lub niezgodność Niezgodność
Domyślnie włączone na platformie .NET 8 Nie.

Przyczyna

Typ rozszerza się System.Exception , ale nie deklaruje wszystkich wymaganych konstruktorów.

Opis reguły

Typy wyjątków muszą implementować następujące trzy konstruktory publiczne:

  • public NewException()

  • public NewException(ciąg)

  • public NewException(ciąg, wyjątek)

Niepowodzenie podczas dostarczenia pełnego zestawu konstruktorów może utrudnić poprawną obsługę wyjątków. Na przykład konstruktor, który ma podpis NewException(string, Exception) , jest używany do tworzenia wyjątków, które są spowodowane przez inne wyjątki. Bez tego konstruktora nie można utworzyć i zgłosić wystąpienia wyjątku niestandardowego zawierającego wyjątek wewnętrzny (zagnieżdżony), który jest tym, co powinien zrobić kod zarządzany w takiej sytuacji.

Aby uzyskać więcej informacji, zobacz CA2229: Implementowanie konstruktorów serializacji.

Jak naprawić naruszenia

Aby naprawić naruszenie tej reguły, dodaj brakujące konstruktory do wyjątku i upewnij się, że mają poprawne ułatwienia dostępu.

Kiedy pomijać ostrzeżenia

Można bezpiecznie pominąć ostrzeżenie z tej reguły, gdy naruszenie jest spowodowane użyciem innego poziomu dostępu dla konstruktorów publicznych.

Pomijanie ostrzeżenia

Jeśli chcesz po prostu pominąć pojedyncze naruszenie, dodaj dyrektywy preprocesora do pliku źródłowego, aby wyłączyć, a następnie ponownie włączyć regułę.

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

Aby wyłączyć regułę dla pliku, folderu lub projektu, ustaw jego ważność na none w pliku konfiguracji.

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

Aby uzyskać więcej informacji, zobacz Jak pominąć ostrzeżenia dotyczące analizy kodu.

Przykład

Poniższy przykład zawiera typ wyjątku, który narusza tę regułę i typ wyjątku, który jest poprawnie zaimplementowany.

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

Zobacz też

CA2229: Zaimplementuj konstruktory serializacji