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