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