Compartilhar via


CA2219: Não lançar exceções em cláusulas de exceção

Propriedade Valor
ID da regra CA2219
Título Não lançar exceções em cláusulas de exceção
Categoria Usage
Correção é disruptiva ou não disruptiva Sem interrupção, com interrupção
Habilitado por padrão no .NET 10 Como sugestão
Idiomas aplicáveis C# e Visual Basic

Causa

Uma exceção é gerada por uma cláusula de finally, filtro ou falha.

Descrição da regra

Quando uma exceção é gerada em uma cláusula de exceção, aumenta consideravelmente a dificuldade de depuração.

Quando uma exceção é gerada em uma cláusula finally ou cláusula de falha, a nova exceção oculta a exceção ativa, se presente. Isso torna o erro original difícil de detectar e depurar.

Quando uma exceção é gerada em uma cláusula de filtro, o runtime a captura silenciosamente e faz com que o filtro seja avaliado como falso. Não há como distinguir entre o filtro avaliado como falso e uma exceção lançada por um filtro. Isso dificulta a detecção e a depuração de erros na lógica do filtro.

Como corrigir violações

Para corrigir essa violação de regra, não levante explicitamente uma exceção a partir de uma cláusula de finally, filtro ou falha.

Example

try
{
    // ...
}
finally
{
    // This code violates the rule.
    throw new Exception();
}

Quando suprimir avisos

Não suprima um aviso dessa regra. Não há cenários nos quais uma exceção gerada em uma cláusula de exceção ofereça um benefício para o código em execução.

CA1065: Não acionar exceções em locais inesperados

Confira também