Partilhar via


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

Property valor
ID da regra CA1032
Título 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 10 Não

Motivo

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 de um arquivo, pasta ou projeto, defina sua gravidade 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