Compartilhar via


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

TypeName

DoNotRaiseExceptionsInUnexpectedLocations

CheckId

CA1065

<strong>Categoria</strong>

Microsoft.design

Alteração significativa

Não separável

Causa

Um método que não se espera lançar exceções lança uma exceção.

Descrição da regra

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

  • Métodos de Get da propriedade

  • Métodos acessadores de evento

  • É igual a métodos

  • Métodos GetHashCode

  • Métodos ToString

  • Construtores estáticos

  • Finalizadores

  • Métodos de Dispose

  • Operadores de igualdade

  • Operadores de conversão implícita

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

Bb386039.collapse_all(pt-br,VS.110).gifMétodos de Get da propriedade

Propriedades são campos basicamente inteligentes.Portanto, eles devem se comportar como um campo tanto quanto possível.Campos não lançar exceções e nem devem propriedades.Se você tiver uma propriedade que lança uma exceção, considere a possibilidade de torná-lo um método.

As seguintes exceções podem ser geradas de um método get de propriedade:

Bb386039.collapse_all(pt-br,VS.110).gifMétodos acessadores de evento

Acessadores de evento devem ser operações simples que não lançar exceções.Um evento não deve lançar uma exceção ao tentar adicionar ou remover um manipulador de eventos.

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

Bb386039.collapse_all(pt-br,VS.110).gifÉ igual a métodos

O seguinte é igual a métodos não devem lançar exceções:

Um é igual a método deve retornar true ou false em vez de gerar uma exceção.Por exemplo, se Equals é passado dois tipos incompatíveis ele deve simplesmente retornar false em vez de gerar uma ArgumentException.

Bb386039.collapse_all(pt-br,VS.110).gifMétodos GetHashCode

O seguinte GetHashCode métodos não geralmente devem lançar exceções:

GetHashCode sempre deve retornar um valor.Caso contrário, você pode perder os itens na tabela de hash.

As versões do GetHashCode que o levam um argumento pode lançar uma ArgumentException.No entanto, Object.GetHashCode nunca deve acionar uma exceção.

Bb386039.collapse_all(pt-br,VS.110).gifMétodos ToString

O depurador usa Object.ToString para ajudá-lo a exibir informações sobre objetos em formato de seqüência de caracteres.Portanto, ToString não deve alterar o estado de um objeto e ele não deve lançar exceções.

Bb386039.collapse_all(pt-br,VS.110).gifConstrutores estáticos

Gerar exceções a partir de um construtor estático faz com que o tipo pode ser usado no domínio do aplicativo atual.Você deve ter um motivo muito bom (como um problema de segurança) para gerar uma exceção de um construtor estático.

Bb386039.collapse_all(pt-br,VS.110).gifFinalizadores

Lançando uma exceção de um finalizador faz com que o CLR falhe rápido, que destrói o processo.Portanto, gerar exceções em um finalizador deve sempre ser evitada.

Bb386039.collapse_all(pt-br,VS.110).gifMétodos de Dispose

A IDisposable.Dispose método não deve acionar uma exceção.Costuma ser chamada de Dispose como parte do que a lógica de limpeza uma finally cláusula.Portanto, explicitamente, lançando uma exceção de Dispose força o usuário adicione dentro de manipulação de exceção do finally cláusula.

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

Bb386039.collapse_all(pt-br,VS.110).gifOperadores de igualdade (= =,! =)

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

Bb386039.collapse_all(pt-br,VS.110).gifOperadores de conversão implícita

Porque o usuário geralmente não sabe o que foi chamado um operador de conversão implícita, uma exceção lançada pelo operador cast implícita é completamente inesperada.Portanto, sem exceções devem ser lançadas de operadores de conversão implícita.

Como corrigir violações

Para getters de propriedade, ou alterar a lógica para que ele não tem mais lançar uma exceção ou alterar a propriedade para um método.

Para todos os outros tipos de método listados anteriormente, altere a lógica para que ele não deve lançar uma exceção.

Quando suprimir avisos

É seguro eliminar um aviso esta regra se a violação tiver sido causada por uma declaração em vez de uma exceção gerada uma exceção.

Regras relacionadas

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

Consulte também

Outros recursos

Avisos de design