Não aumente exceções em locais inesperados
TypeName |
DoNotRaiseExceptionsInUnexpectedLocations |
CheckId |
CA1065 |
Category (Categoria) |
Microsoft.Design |
Quebrando alterar |
Não separável |
Causa
Um método que não deve lançar exceções lança uma exceção.
Descrição da regra
Métodos que não deve lançar exceções podem ser categorizados sistema autônomo segue:
Propriedade Get métodos
Métodos de acesso do evento
É igual a métodos
Métodos GetHashCode
Métodos ToString
Construtores estático
Finalizadores
Descartar métodos
Operadores de igualdade
Operadores caso implícitas
As seções a seguir discutem esses tipos de método.
Propriedade Get métodos
As propriedades são campos basicamente inteligentes.Portanto, eles devem se comportam sistema autônomo um campo sempre que 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 exceções a seguir têm permissão para ser lançado de um método get da propriedade:
System.InvalidOperationException e todos os derivativos (incluindo System.ObjectDisposedException)
System.NotSupportedException e todos os derivativos
System.ArgumentException (somente de indexados get)
KeyNotFoundException (somente de indexados get)
Métodos de acesso do evento
Acessadores de evento devem ser operações simples 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 exceções a seguir têm permissão para ser lançada do accesor evento:
System.InvalidOperationException e todos os derivativos (incluindo System.ObjectDisposedException)
System.NotSupportedException e todos os derivativos
ArgumentException e derivativos
É igual a métodos
A seguir É igual a métodos não devem lançar exceções:
An É 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-apenas deve retornar false em vez de gerar um ArgumentException.
Métodos GetHashCode
A seguir GetHashCode métodos devem geralmente lançam exceções não:
GetHashCode sempre deve retornar um valor.Caso contrário, você pode perder itens na tabela de hash.
As versões de GetHashCode que levam um argumento pode lançar uma ArgumentException. No entanto, objeto.GetHashCode nunca deve lançar uma exceção.
Métodos ToString
O depurador usa Object.ToString para ajudar 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.
Construtores estático
Lançar exceções a partir de um construtor estático faz com que o tipo a ser inutilizável no domínio do aplicativo corrente.Você deve ter um motivo muito mercadoria (sistema autônomo um problema de segurança) para gerar uma exceção de um construtor estático.
Finalizadores
Lançando uma exceção de um finalizador faz com que o CLR falhas rápidas e que tears o processo.Portanto, gerar exceções em um finalizador deve sempre ser evitada.
Descartar métodos
A IDisposable.Dispose ou [M:System.IDisposable.Dispose(bool disposing)] método não deve lançar uma exceção. Dispose é freqüentemente chamado sistema autônomo parte da lógica em um de Limparfinally cláusula. Portanto, explicitamente, lançando uma exceção de Dispose força o usuário a adicionar dentro de de manipulação de exceçãofinally cláusula.
The Dispose(False) caminho de código nunca deve lançar exceções, porque isso quase sempre é chamado de um finalizador.
Operadores de igualdade (==,! =)
Assim como os métodos Equals, operadores de igualdade devem retornar qualquer um dos true ou false e não deve lançar exceções.
Operadores de reforço implícita
Porque o usuário é geralmente não sabem que um operador de conversão implícita tiver sido chamado, uma exceção lançada pelo operador de conversão implícita é completamente inesperada.Portanto, não permitir exceções devem ser lançadas de operadores de conversão implícita.
Como corrigir violações
Para a propriedade getters, ou alterar a lógica para que ele não tem mais a lançar uma exceção ou altere a propriedade para um método.
Para todos os outros método tipos listados anteriormente, altere a lógica para que não deve lançar uma exceção.
Quando suprimir avisos
É seguro eliminar um aviso essa regra se a violação tiver sido causada por uma declaração em vez de uma exceção gerada uma exceção.
Regras relacionadas
Não aumente exceções em cláusulas de exceção