Compartilhar via


Tratando e gerando exceções no .NET

Os aplicativos devem ser capazes de lidar com erros que ocorrem durante a execução de maneira consistente. O .NET fornece um modelo para notificar aplicativos de erros de maneira uniforme: as operações do .NET indicam falha gerando exceções.

Exceções

Uma exceção é qualquer condição de erro ou comportamento inesperado encontrado por um programa em execução. 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 runtime (como código que não pode ser verificado) e assim por diante. Seu aplicativo pode se recuperar de algumas dessas condições, mas não de outras. Embora você possa se recuperar da maioria das exceções de aplicativo, não é possível se recuperar da maioria das exceções de runtime.

No .NET, uma exceção é um objeto que herda da System.Exception classe. Uma exceção é lançada de uma área do código em que ocorreu um problema. A exceção é passada pilha acima até que o aplicativo trate dela ou o programa seja encerrado.

Exceções versus métodos tradicionais de tratamento de erros

Tradicionalmente, o modelo de tratamento de erros de um idioma dependia da maneira exclusiva do idioma de detectar erros e localizar manipuladores para eles ou no mecanismo de tratamento de erros fornecido pelo sistema operacional. A maneira como o .NET implementa o tratamento de exceções fornece as seguintes vantagens:

  • A geração e o tratamento de exceções funcionam da mesma forma para linguagens de programação do .NET.

  • Não requer nenhuma sintaxe de linguagem específica para lidar com exceções, mas permite que cada idioma defina sua própria sintaxe.

  • Exceções podem ser geradas pelos limites de processo e até mesmo de computador.

  • O código de tratamento de exceções pode ser adicionado a um aplicativo para aumentar a confiabilidade do programa.

As exceções oferecem vantagens em relação a outros métodos de notificação de erro, como códigos de retorno. As falhas não passam despercebidas porque, se uma exceção for gerada e você não lidar com ela, o runtime encerrará seu aplicativo. Valores inválidos não continuam a se propagar pelo sistema como resultado de um código que não verifica se há um código de retorno de falha.

Exceções comuns

A tabela a seguir lista algumas exceções comuns com exemplos do que pode causar.

Tipo de exceção Descrição Exemplo
Exception Classe base para todas as exceções. Nenhum (use uma classe derivada dessa exceção).
IndexOutOfRangeException Gerada pelo runtime somente quando uma matriz é indexada incorretamente. Indexando uma matriz fora de seu intervalo válido:
arr[arr.Length+1]
NullReferenceException Gerado pelo runtime somente quando um objeto nulo é referenciado. object o = null;
o.ToString();
InvalidOperationException Gerada por métodos quando em um estado inválido. Chamar Enumerator.MoveNext() após a remoção de um item da coleção subjacente.
ArgumentException Classe base para todas as exceções de argumento. Nenhum (use uma classe derivada dessa exceção).
ArgumentNullException Gerada por métodos que não permitem que um argumento seja nulo. String s = null;
"Calculate".IndexOf(s);
ArgumentOutOfRangeException Lançados por métodos que verificam se os argumentos estão em um determinado intervalo. String s = "string";
s.Substring(s.Length+1);

Consulte também