Partilhar via


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

Propriedade valor
ID da regra CA2201
Cargo Não gerar tipos de exceção reservados
Categoria Utilização
A correção está quebrando ou não quebrando Quebrando
Habilitado por padrão no .NET 8 Não

Causa

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

Descrição da regra

Os seguintes tipos de exceção são demasiado gerais para fornecer informações suficientes ao utilizador:

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

Não lance exceções gerais

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

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

Lançar exceções específicas

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

Argumento inválido Exceção
null referência ArgumentNullException
Fora do intervalo de valores permitido (como um índice para uma coleção ou lista) ArgumentOutOfRangeException
Valor inválido enum 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 lançar 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
A operação não é suportada (como em um substituído Stream.Write em um fluxo aberto para leitura). NotSupportedException
A conversão resultaria em um estouro (como em uma sobrecarga explícita do operador de elenco). OverflowException

Para todas as outras situações, considere criar seu próprio tipo que deriva e Exception jogue 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 desta regra.