Share via


CA2201: Não acionar tipos de exceção reservados

Property Valor
ID da regra CA2201
Título Não acionar tipos de exceção reservados
Categoria Usage
Correção interruptiva ou sem interrupção Quebra
Habilitado por padrão no .NET 8 Não

Causa

Um método gera um tipo de exceção muito geral ou reservado pelo runtime.

Descrição da regra

Os seguintes tipos de exceção são muito gerais para fornecer informações suficientes ao usuário:

Os seguintes tipos de exceção são reservados e devem ser gerados somente pelo common language runtime:

Não gerar exceções gerais

Se você gerar um tipo de exceção geral, como Exception ou SystemException, em uma biblioteca ou estrutura, isso forçará os consumidores a capturar todas as exceções, incluindo exceções desconhecidas com que eles não sabem como lidar.

Em vez disso, gere um tipo mais derivado que já existe na estrutura ou crie seu próprio tipo que deriva de Exception.

Gerar exceções específicas

A tabela a seguir mostra qual exceção gerar para vários tipos de argumentos inválidos, incluindo o parâmetro value no acessador set de uma propriedade.

Argumento inválido Exceção
null referência ArgumentNullException
Fora do intervalo permitido de valores (como um índice para uma coleção ou lista) ArgumentOutOfRangeException
Valor enum inválido InvalidEnumArgumentException
Contém um formato que não atende às especificações de parâmetro de um método (como a cadeia de caracteres de formato para ToString(String)) FormatException
Caso contrário, é inválido ArgumentException

A tabela a seguir mostra qual exceção gerar para vários tipos de operações inválidas.

Operação inválida Exceção
A operação é inválida para o estado atual de um objeto. InvalidOperationException
A operação é executada em um objeto que foi descartado. ObjectDisposedException
Não há suporte para a operação (como em um Stream.Write substituído em um stream aberto para leitura). NotSupportedException
A conversão resultaria em um estouro (como em uma sobrecarga explícita do operador de conversão). OverflowException

Para todas as outras situações, considere criar seu próprio tipo que deriva Exception e lance isso.

Como corrigir violações

Para corrigir uma violação dessa regra, altere o tipo da exceção lançada para um tipo específico que não seja um dos tipos reservados.

Quando suprimir avisos

Não suprima um aviso nessa regra.