Partilhar via


CA1032: Implementar construtores de exceção padrão

Propriedade valor
ID da regra CA1032
Cargo Implementar construtores de exceção padrão
Categoria Desenho
A correção está quebrando ou não quebrando Sem quebra
Habilitado por padrão no .NET 8 Não

Causa

Um tipo estende, System.Exception mas não declara todos os construtores necessários.

Descrição da regra

Os tipos de exceção devem implementar os seguintes três construtores públicos:

  • pública NewException()

  • public NewException(string)

  • public NewException(string, Exceção)

A falha em fornecer o conjunto completo de construtores pode dificultar o tratamento correto de exceções. Por exemplo, o construtor que tem a assinatura NewException(string, Exception) é usado para criar exceções que são causadas por outras exceções. Sem esse construtor, você não pode criar e lançar uma instância de sua exceção personalizada que contém uma exceção interna (aninhada), que é o que o código gerenciado deve fazer em tal situação.

Para obter mais informações, consulte CA2229: Implementar construtores de serialização.

Como corrigir violações

Para corrigir uma violação dessa regra, adicione os construtores ausentes à exceção e certifique-se de que eles tenham 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

Se você quiser apenas suprimir uma única violação, adicione diretivas de pré-processador ao seu arquivo de origem para desativar e, em seguida, reativar 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 para um arquivo, pasta ou projeto, defina sua severidade como none no arquivo de configuração.

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

Para obter mais informações, consulte 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.
    }
}

Consulte também

CA2229: Implementar construtores de serialização