Partilhar via


CA1065: não acione exceções em locais inesperados

TypeName

DoNotRaiseExceptionsInUnexpectedLocations

CheckId

CA1065

Categoria

Microsoft.Design

Alteração Significativa

Sem Quebra

Causa

Um método que não é esperado que gera de exceções uma exceção.

Descrição da Regra

Os métodos que não são esperados lançar exceções podem ser categorizados como segue:

  • Obtém A propriedade métodos

  • Métodos de acessador de evento

  • Métodos de igual

  • Métodos de GetHashCode

  • Métodos ToString

  • Construtores estáticos

  • Finalizers

  • Disponha métodos

  • Operadores de igualdade

  • Operadores de conversão implícita

As seções a seguir discutem esses tipos do método.

Obtém A propriedade métodos

As propriedades são campos basicamente inteligente.Em virtude disso, devem se comportar como um campo o máximo possível.Os campos não lançam exceções e nenhuma se as propriedades.Se você tiver uma propriedade que gerou uma exceção, considere torná-lo um método.

As seguintes exceções podem ser geradas de uma propriedade obtém o método:

Métodos de acessador de evento

Os acessadores de evento devem ser as operações simples que não lançam exceções.Um evento não deve lançar uma exceção quando você tenta adicionar ou remover um manipulador de eventos.

As seguintes exceções podem ser geradas de um accesor de evento:

Métodos de igual

Os seguintes métodos de Igual a não deve lançar exceções:

Um método de Igual a deve retornar true ou false em vez de gerar uma exceção.Por exemplo, se for igual são passados dois tipos incompatíveis deve retornar apenas false em vez de gerar ArgumentException.

Métodos de GetHashCode

Os seguintes métodos de GetHashCode não devem normalmente deve lançar exceções:

GetHashCode sempre deve retornar um valor.Se não, você pode perder itens na tabela de hash.

As versões de GetHashCode que possuem um argumento pode gerar ArgumentException.No entanto, Object.GetHashCode nunca deve gerar uma exceção.

Métodos ToString

O usa Object.ToString do depurador ajudar a exibir informações sobre objetos em formato de cadeia de caracteres.Consequentemente, ToString não deve alterar o estado de um objeto e não deve lançar exceções.

Construtores estáticos

Lançar exceções de um construtor estática faz com que o tipo é inutilizável no domínio de aplicativo atual.Você deve ter uma boa razão muito (como um problema de segurança) para gerar uma exceção de um construtor estático.

Finalizers

Gerar uma exceção de um finalizador CLR causará a falha rapidamente, que rasga para baixo o processo.Em virtude disso, as exceções de reprodução em um finalizador sempre devem ser evitadas.

Disponha métodos

Um método de IDisposable.Dispose não deve gerar uma exceção.Dispose é chamada frequentemente como parte da lógica de acordo com uma cláusula de finally .Consequentemente, gerando uma exceção explicitamente descartado de força o usuário adiciona a manipulação de exceção na cláusula FROM de finally .

O caminho de código de Descartado (false) nunca deve lançar exceções, pois isso é chamado de quase sempre de um finalizador.

Operadores de igualdade (==! =)

Como métodos de igual, os operadores de igualdade devem retornar true ou false e não deve lançar exceções.

Operadores de conversão implícita

Porque o usuário é frequentemente sabe que um operador de conversão implícita esteve chamado, uma exceção lançada pelo operador cast implícita é completamente inesperada.Consequentemente, nenhuma exceção deve ser gerada de operadores de conversão implícita.

Como Corrigir Violações

Para getter de propriedade, qualquer alteração a lógica de forma que não mais tenha que lance uma exceção, ou alterar a propriedade de um método.

Para todos os outros tipos de método listados anteriormente, altere a lógica de modo que já não precisa gerar uma exceção.

Quando Suprimir Alertas

É seguro suprimir um aviso dessa regra se a violação foi causado por uma declaração de exceção em vez de uma exceção gerada.

Regras Relacionadas

CA2219: não acione exceções em cláusulas de exceção

Consulte também

Outros recursos

Avisos de design