Usar tipos de exceção padrãoUsing Standard Exception Types

Esta seção descreve as exceções padrão fornecidas pela estrutura e os detalhes de seu uso.This section describes the standard exceptions provided by the Framework and the details of their usage. A lista não é, de maneira alguma, completa.The list is by no means exhaustive. Consulte a documentação de referência do .NET Framework para uso de outros tipos de exceção de estrutura.Please refer to the .NET Framework reference documentation for usage of other Framework exception types.

Exception e SystemExceptionException and SystemException

❌ Não lançar System.Exception ou System.SystemException .❌ DO NOT throw System.Exception or System.SystemException.

❌ Não pegue System.Exception nem System.SystemException no código de estrutura, a menos que você pretenda relançar.❌ DO NOT catch System.Exception or System.SystemException in framework code, unless you intend to rethrow.

❌ Evite capturar System.Exception ou System.SystemException , exceto em manipuladores de exceção de nível superior.❌ AVOID catching System.Exception or System.SystemException, except in top-level exception handlers.

ApplicationExceptionApplicationException

❌ NÃO lançar ou derivar de ApplicationException .❌ DO NOT throw or derive from ApplicationException.

InvalidOperationExceptionInvalidOperationException

✔️ gerar um InvalidOperationException se o objeto estiver em um estado inadequado.✔️ DO throw an InvalidOperationException if the object is in an inappropriate state.

ArgumentException, ArgumentNullException e ArgumentOutOfRangeExceptionArgumentException, ArgumentNullException, and ArgumentOutOfRangeException

✔️ gerar ArgumentException ou um de seus subtipos se argumentos inválidos forem passados para um membro.✔️ DO throw ArgumentException or one of its subtypes if bad arguments are passed to a member. Prefira o tipo de exceção mais derivada, se aplicável.Prefer the most derived exception type, if applicable.

✔️ definir a ParamName propriedade ao lançar uma das subclasses de ArgumentException .✔️ DO set the ParamName property when throwing one of the subclasses of ArgumentException.

Essa propriedade representa o nome do parâmetro que causou a geração da exceção.This property represents the name of the parameter that caused the exception to be thrown. Observe que a propriedade pode ser definida usando uma das sobrecargas do construtor.Note that the property can be set using one of the constructor overloads.

✔️ Use value para o nome do parâmetro de valor implícito dos setters de propriedade.✔️ DO use value for the name of the implicit value parameter of property setters.

NullReferenceException, IndexOutOfRangeException e AccessViolationExceptionNullReferenceException, IndexOutOfRangeException, and AccessViolationException

❌ Não permita que as APIs que podem ser chamadas publicamente lancem NullReferenceException , AccessViolationException , ou IndexOutOfRangeException .❌ DO NOT allow publicly callable APIs to explicitly or implicitly throw NullReferenceException, AccessViolationException, or IndexOutOfRangeException. Essas exceções são reservadas e geradas pelo mecanismo de execução e, na maioria dos casos, indicam um bug.These exceptions are reserved and thrown by the execution engine and in most cases indicate a bug.

Faça a verificação de argumento para evitar lançar essas exceções.Do argument checking to avoid throwing these exceptions. Lançar essas exceções expõe os detalhes de implementação do método que pode mudar ao longo do tempo.Throwing these exceptions exposes implementation details of your method that might change over time.

StackOverflowExceptionStackOverflowException

❌ Não lance explicitamente StackOverflowException .❌ DO NOT explicitly throw StackOverflowException. A exceção deve ser gerada explicitamente apenas pelo CLR.The exception should be explicitly thrown only by the CLR.

❌ Não Catch StackOverflowException .❌ DO NOT catch StackOverflowException.

É quase impossível escrever código gerenciado que permaneça consistente na presença de estouros de pilha arbitrários.It is almost impossible to write managed code that remains consistent in the presence of arbitrary stack overflows. As partes não gerenciadas do CLR permanecem consistentes com o uso de investigações para mover estouros de pilha para locais bem definidos em vez de fazer backup de estouros de pilha arbitrários.The unmanaged parts of the CLR remain consistent by using probes to move stack overflows to well-defined places rather than by backing out from arbitrary stack overflows.

OutOfMemoryExceptionOutOfMemoryException

❌ Não lance explicitamente OutOfMemoryException .❌ DO NOT explicitly throw OutOfMemoryException. Essa exceção deve ser lançada apenas pela infraestrutura do CLR.This exception is to be thrown only by the CLR infrastructure.

COMException, SEHException e ExecutionEngineExceptionComException, SEHException, and ExecutionEngineException

❌ Não lance explicitamente COMException , ExecutionEngineException , e SEHException .❌ DO NOT explicitly throw COMException, ExecutionEngineException, and SEHException. Essas exceções devem ser lançadas apenas pela infraestrutura do CLR.These exceptions are to be thrown only by the CLR infrastructure.

Partes © 2005, 2009 Microsoft Corporation. Todos os direitos reservados.Portions © 2005, 2009 Microsoft Corporation. All rights reserved.

Reimpresso com permissão da Pearson Education, Inc. das Diretrizes de Design do Framework: convenções, linguagens e padrões para bibliotecas do .NET reutilizável, 2ª edição por Krzysztof Cwalina e Brad Abrams, publicado em 22 de outubro de 2008 por Addison-Wesley Professional como parte da série de desenvolvimento do Microsoft Windows.Reprinted by permission of Pearson Education, Inc. from Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries, 2nd Edition by Krzysztof Cwalina and Brad Abrams, published Oct 22, 2008 by Addison-Wesley Professional as part of the Microsoft Windows Development Series.

Confira tambémSee also