Condividi tramite


CA1032: Implementare costruttori di eccezioni standard

Proprietà valore
ID regola CA1032
Title Implementare costruttori di eccezioni standard
Categoria Progettazione
La correzione causa un'interruzione o meno Non causa un'interruzione
Abilitato per impostazione predefinita in .NET 9 No

Causa

Un tipo estende System.Exception ma non dichiara tutti i costruttori necessari.

Descrizione regola

I tipi di eccezione devono implementare i tre costruttori pubblici seguenti:

  • public NewException()

  • public NewException(string)

  • public NewException(string, Exception)

Se non viene fornito l'insieme completo di costruttori può risultare difficile gestire correttamente le eccezioni. Ad esempio, il costruttore con la firma NewException(string, Exception) viene usato per creare eccezioni causate da altre eccezioni. Senza questo costruttore, non è possibile creare e generare un'istanza dell'eccezione personalizzata che contiene un'eccezione interna (annidata), ovvero ciò che il codice gestito deve eseguire in tale situazione.

Per altre informazioni, vedere CA2229: Implementare costruttori di serializzazione.

Come correggere le violazioni

Per correggere una violazione di questa regola, aggiungere i costruttori mancanti all'eccezione e assicurarsi che dispongano dell'accessibilità corretta.

Quando eliminare gli avvisi

È possibile eliminare un avviso da questa regola quando la violazione viene causata usando un livello di accesso diverso per i costruttori pubblici.

Eliminare un avviso

Se si vuole eliminare una singola violazione, aggiungere direttive del preprocessore al file di origine per disabilitare e quindi riabilitare la regola.

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

Per disabilitare la regola per un file, una cartella o un progetto, impostarne la gravità none su nel file di configurazione.

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

Per altre informazioni, vedere Come eliminare gli avvisi di analisi del codice.

Esempio

L'esempio seguente contiene un tipo di eccezione che viola questa regola e un tipo di eccezione implementato correttamente.

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

Vedi anche

CA2229: Implementare costruttori di serializzazione