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 9 | 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:
- System.AccessViolationException
- System.ExecutionEngineException
- System.IndexOutOfRangeException
- System.NullReferenceException
- System.OutOfMemoryException
- System.Runtime.InteropServices.COMException
- System.Runtime.InteropServices.ExternalException
- System.Runtime.InteropServices.SEHException
- System.StackOverflowException
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.