Tratando e gerando exceções no .NETHandling and throwing exceptions in .NET

Aplicativos devem ser capazes de tratar de erros que ocorrem durante a execução de uma maneira consistente.Applications must be able to handle errors that occur during execution in a consistent manner. O .NET fornece um modelo para notificar aplicativos sobre erros de maneira uniforme: operações do .NET indicam falhas por meio da geração de exceções..NET provides a model for notifying applications of errors in a uniform way: .NET operations indicate failure by throwing exceptions.

ExceçõesExceptions

Uma exceção é qualquer condição de erro ou comportamento inesperado encontrado por um programa em execução.An exception is any error condition or unexpected behavior that is encountered by an executing program. Exceções podem ser geradas devido a uma falha em seu código ou no código que você chama (como uma biblioteca compartilhada), recursos do sistema operacional não disponíveis, condições inesperadas encontradas pelo tempo de execução (como código que não pode ser verificado) e assim por diante.Exceptions can be thrown because of a fault in your code or in code that you call (such as a shared library), unavailable operating system resources, unexpected conditions that the runtime encounters (such as code that can't be verified), and so on. Seu aplicativo pode se recuperar de algumas dessas condições, mas não de outras.Your application can recover from some of these conditions, but not from others. Embora você possa se recuperar da maioria das exceções de aplicativo, não é possível recuperar-se da maioria das exceções de tempo de execução.Although you can recover from most application exceptions, you can't recover from most runtime exceptions.

No .NET, uma exceção é um objeto herdado da classe System.Exception.In .NET, an exception is an object that inherits from the System.Exception class. Uma exceção é lançada de uma área do código em que ocorreu um problema.An exception is thrown from an area of code where a problem has occurred. A exceção é passada pilha acima até que o aplicativo trate dela ou o programa seja encerrado.The exception is passed up the stack until the application handles it or the program terminates.

Métodos de tratamento de exceção vs. tratamento de erro tradicionalExceptions vs. traditional error-handling methods

Tradicionalmente, o modelo de tratamento de erro da linguagem confiava na forma exclusiva da linguagem de detectar erros e localizar manipuladores para eles ou no mecanismo de tratamento de erro fornecido pelo sistema operacional.Traditionally, a language's error-handling model relied on either the language's unique way of detecting errors and locating handlers for them, or on the error-handling mechanism provided by the operating system. A maneira como o .NET implementa o tratamento de exceção oferece as seguintes vantagens:The way .NET implements exception handling provides the following advantages:

  • O lançamento e tratamento de exceção funciona da mesma maneira para linguagens de programação .NET.Exception throwing and handling works the same for .NET programming languages.

  • Não requer nenhuma sintaxe de linguagem específica para tratamento de exceção, mas permite que cada linguagem defina sua própria sintaxe.Doesn't require any particular language syntax for handling exceptions, but allows each language to define its own syntax.

  • Exceções podem ser geradas pelos limites de processo e até mesmo de computador.Exceptions can be thrown across process and even machine boundaries.

  • O código de tratamento de exceção pode ser adicionado a um aplicativo para aumentar a confiabilidade do programa.Exception-handling code can be added to an application to increase program reliability.

As exceções oferecem vantagens sobre outros métodos de notificação de erro, como códigos de retorno.Exceptions offer advantages over other methods of error notification, such as return codes. Falhas não passam despercebidas porque se uma exceção for lançada e você não tratar dela, o tempo de execução encerra o aplicativo.Failures don't go unnoticed because if an exception is thrown and you don't handle it, the runtime terminates your application. Valores inválidos não continuam a se propagar através do sistema como resultado do código que não consegue verificar se há um código de retorno de falha.Invalid values don't continue to propagate through the system as a result of code that fails to check for a failure return code.

Exceções comunsCommon exceptions

A tabela a seguir lista algumas exceções comuns com exemplos do que pode causá-las.The following table lists some common exceptions with examples of what can cause them.

Tipo de exceçãoException type DescriçãoDescription ExemploExample
Exception A classe base para todas as exceções.Base class for all exceptions. Nenhuma (use uma classe derivada dessa exceção).None (use a derived class of this exception).
IndexOutOfRangeException Gerada pelo tempo de execução somente quando uma matriz é indexada incorretamente.Thrown by the runtime only when an array is indexed improperly. Indexar uma matriz fora do intervalo válido:Indexing an array outside its valid range:
arr[arr.Length+1]
NullReferenceException Gerada pelo tempo de execução somente quando um objeto nulo é referenciado.Thrown by the runtime only when a null object is referenced. object o = null;
o.ToString();
InvalidOperationException Gerada por métodos quando em um estado inválido.Thrown by methods when in an invalid state. Chamar Enumerator.MoveNext() após a remoção de um item da coleção subjacente.Calling Enumerator.MoveNext() after removing an item from the underlying collection.
ArgumentException A classe base para todas as exceções de argumento.Base class for all argument exceptions. Nenhuma (use uma classe derivada dessa exceção).None (use a derived class of this exception).
ArgumentNullException Gerada por métodos que não permitem que um argumento seja nulo.Thrown by methods that do not allow an argument to be null. String s = null;
"Calculate".IndexOf(s);
ArgumentOutOfRangeException Gerada por métodos que verificam se os argumentos estão em um determinado intervalo.Thrown by methods that verify that arguments are in a given range. String s = "string";
s.Substring(s.Length+1);

Consulte tambémSee also