CA1032: Implementar construtores de exceção padrão
Property | Valor |
---|---|
ID da regra | CA1032 |
Título | Implementar construtores de exceção padrão |
Categoria | Projetar |
Correção interruptiva ou sem interrupção | Sem interrupção |
Habilitado por padrão no .NET 8 | Não |
Causa
Um tipo se estende System.Exception, mas não declara todos os construtores necessários.
Descrição da regra
Os tipos de exceção devem implementar os três construtores públicos a seguir:
public NewException()
public NewException(string)
public NewException(string, Exception)
Deixar de fornecer o conjunto completo de construtores pode dificultar o tratamento correto das exceções. Por exemplo, o construtor que tem a assinatura NewException(string, Exception)
é usado para criar exceções causadas por outras exceções. Sem esse construtor, não é possível criar e lançar uma instância de sua exceção personalizada que contenha uma exceção interna (aninhada), o que o código gerenciado deve fazer em tal situação.
Para saber mais, confira CA2229: implementar construtores de serialização.
Como corrigir violações
Para corrigir uma violação dessa regra, adicione os construtores ausentes à exceção e verifique se eles têm a acessibilidade correta.
Quando suprimir avisos
É seguro suprimir um aviso dessa regra quando a violação é causada pelo uso de um nível de acesso diferente para os construtores públicos.
Suprimir um aviso
Para suprimir apenas uma violação, adicione diretivas de pré-processador ao arquivo de origem a fim de desabilitar e, em seguida, reabilitar a regra.
#pragma warning disable CA1032
// The code that's violating the rule is on this line.
#pragma warning restore CA1032
Para desabilitar a regra em um arquivo, uma pasta ou um projeto, defina a severidade como none
no arquivo de configuração.
[*.{cs,vb}]
dotnet_diagnostic.CA1032.severity = none
Para obter mais informações, confira Como suprimir avisos de análise de código.
Exemplo
O exemplo a seguir contém um tipo de exceção que viola essa regra e um tipo de exceção que é implementado corretamente.
// 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.
}
}