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:
- 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 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.