Compartilhar via


CA2201: Não aumente os tipos de exceção reservada

TypeName

DoNotRaiseReservedExceptionTypes

CheckId

CA2201

<strong>Categoria</strong>

Microsoft.Usage

Alteração significativa

Quebrando

Causa

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

Descrição da regra

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

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

Não jogue exceções gerais

Se você lança um tipo de exceção geral, como Exception ou SystemException em uma biblioteca ou estrutura, ela força os consumidores para interceptar todas as exceções, incluindo exceções desconhecidas que eles não sabem como manipular.

Em vez disso, lançar um tipo mais derivado que já existe no framework, ou criar seu próprio tipo que deriva do Exception.

Lançar exceções específicas

A tabela a seguir mostra os parâmetros e quais exceções lançar ao validar o parâmetro, incluindo o parâmetro value no acessador set de uma propriedade:

Descrição do parâmetro

Exceção

nullreferência 

System.ArgumentNullException

Fora do intervalo permitido de valores (como um índice para uma coleção ou lista)

System.ArgumentOutOfRangeException

Inválido enum valor

System.ComponentModel.InvalidEnumArgumentException

Contém um formato que não atende as especificações do parâmetro de um método (como, por exemplo, a seqüência de caracteres de formato para ToString(String))

System.FormatException

Caso contrário inválido

System.ArgumentException

Quando uma operação é inválida para o estado atual de lançar um objetoSystem.InvalidOperationException

Quando uma operação é executada em um objeto que foi descartado throwSystem.ObjectDisposedException

Quando não há suporte para uma operação (como em uma substituição Stream.Write em um fluxo aberto para leitura) throw System.NotSupportedException

Quando uma conversão resultaria em um estouro (como em uma sobrecarga de operador de conversão explícita) throwSystem.OverflowException

Para outras situações, considere a criação de seu próprio tipo que deriva do Exception e lançar que.

Como corrigir violações

Para corrigir uma violação desta regra, altere o tipo de exceção emitida para um tipo específico, não é um dos tipos de reservado.

Quando suprimir avisos

Não suprimir um aviso da regra.

Regras relacionadas

CA1031: Não capturar os tipos de exceção geral