Analisar as exceções geradas pelo compilador
- 10 minutos
As exceções são geradas pelo runtime do .NET ou por código em um programa. O tipo de exceção depende do código que causa a exceção.
Exceções geradas pelo compilador
O runtime do .NET gera exceções quando as operações básicas falham. Aqui está uma pequena lista de exceções de runtime e suas condições de erro:
ArrayTypeMismatchException: gerado quando uma matriz não pode armazenar um determinado elemento porque o tipo real do elemento é incompatível com o tipo real da matriz.DivideByZeroException: Gerado quando é feita uma tentativa de dividir um valor integral por zero.FormatException: lançado quando o formato de um argumento é inválido.IndexOutOfRangeException: gerado quando uma tentativa é feita para indexar uma matriz quando o índice é menor que zero ou fora dos limites da matriz.InvalidCastException: gerado quando uma conversão explícita de um tipo base em uma interface ou em um tipo derivado falha no runtime.NullReferenceException: gerado quando uma tentativa é feita para referenciar um objeto cujo valor é nulo.OverflowException: Gerado quando uma operação aritmética em um contexto verificado transborda.
Exemplos de código para exceções geradas pelo compilador
Os exemplos de código a seguir mostram um exemplo do código que causa uma exceção gerada pelo compilador.
ArrayTypeMismatchException
Uma exceção do tipo ArrayTypeMismatchException é gerada quando é feita uma tentativa de armazenar um elemento do tipo errado dentro de uma matriz. O exemplo a seguir gera uma exceção ArrayTypeMismatchException ao tentar armazenar um valor numérico em uma matriz de cadeia de caracteres.
string[] names = { "Dog", "Cat", "Fish" };
Object[] objs = (Object[])names;
Object obj = (Object)13;
objs[2] = obj; // ArrayTypeMismatchException occurs
DivideByZeroException
Uma exceção de tipo DivideByZeroException ocorre ao tentar dividir um número inteiro ou decimal por zero. O exemplo a seguir gera uma DivideByZeroException exceção ao executar a divisão de inteiros.
int number1 = 3000;
int number2 = 0;
Console.WriteLine(number1 / number2); // DivideByZeroException occurs
Observação
Dividir um valor de ponto flutuante por zero não gera uma exceção; resulta em infinito positivo, infinito negativo ou não um número (NaN), de acordo com as regras da aritmética IEEE 754.
FormatException
Uma exceção de tipo FormatException ocorre quando o formato de um argumento é inválido ou quando uma cadeia de caracteres de formato composto não está bem formada. O exemplo a seguir gera uma FormatException exceção ao tentar converter uma cadeia de caracteres em um inteiro.
int valueEntered;
string userValue = "two";
valueEntered = int.Parse(userValue); // FormatException occurs
IndexOutOfRangeException
Uma exceção de tipo IndexOutOfRangeException é gerada quando é feita uma tentativa de acessar um elemento de uma matriz ou coleção com um índice fora de seus limites. O exemplo a seguir gera uma exceção IndexOutOfRangeException ao tentar atribuir o último elemento da values1 matriz ao último elemento da values2 matriz.
int[] values1 = { 3, 6, 9, 12, 15, 18, 21 };
int[] values2 = new int[6];
values2[values1.Length - 1] = values1[values1.Length - 1]; // IndexOutOfRangeException occurs
InvalidCastException
Uma exceção do tipo InvalidCastException é gerada quando há uma tentativa de fazer uma conversão inválida ou explícita. O exemplo a seguir gera uma InvalidCastException ao tentar converter uma object cadeia de caracteres de tipo em uma int variável.
object obj = "This is a string";
int num = (int)obj;
NullReferenceException (Exceção de Referência Nula)
Uma exceção do tipo NullReferenceException é gerada ao tentar acessar um membro em um tipo cujo valor é nulo. Dois exemplos são mostrados. No primeiro exemplo, um NullReferenceException é gerado ao tentar acessar um elemento de uma matriz nula. O segundo exemplo gera um NullReferenceException ao tentar acessar um método de uma cadeia de caracteres nula.
int[] values = null;
for (int i = 0; i <= 9; i++)
values[i] = i * 2;
string? lowCaseString = null;
Console.WriteLine(lowCaseString.ToUpper());
OverflowException
Uma exceção de tipo OverflowException ocorre quando uma operação aritmética tenta atribuir um resultado fora do intervalo do tipo de dados de destino. O exemplo a seguir gera uma exceção OverflowException ao tentar converter um decimal valor de 400 em uma byte variável.
decimal x = 400;
byte i;
i = (byte)x; // OverflowException occurs
Console.WriteLine(i);
Recapitular
Estes são alguns pontos importantes desta unidade que você deve se lembrar:
- O runtime do .NET gera uma exceção quando uma operação falha.
- O tipo de exceção depende do código que causa a exceção.
- O aplicativo deve capturar as exceções de runtime.