Examen de excepciones generadas por el compilador
- 10 minutos
El entorno de ejecución de .NET o el código de un programa generan excepciones. El tipo de excepción depende del código que provoca la excepción.
Excepciones generadas por el compilador
El entorno de ejecución de .NET produce excepciones cuando se produce un error en las operaciones básicas. Esta es una breve lista de excepciones en tiempo de ejecución y sus condiciones de error:
ArrayTypeMismatchException: se produce cuando una matriz no puede almacenar un elemento determinado porque el tipo real del elemento no es compatible con el tipo real de la matriz.DivideByZeroException: Se produce cuando se intenta dividir un valor entero en cero.FormatException: se produce cuando el formato de un argumento no es válido.IndexOutOfRangeException: se produce cuando se intenta indizar una matriz cuando el índice es menor que cero o fuera de los límites de la matriz.InvalidCastException: se produce cuando se produce un error en una conversión explícita de un tipo base a una interfaz o a un tipo derivado en tiempo de ejecución.NullReferenceException: se produce cuando se intenta hacer referencia a un objeto cuyo valor es NULL.OverflowException: Se produce cuando se desborda una operación aritmética en un contexto comprobado.
Ejemplos de código para excepciones generadas por el compilador
Los ejemplos de código siguientes muestran un ejemplo del código que provoca una excepción generada por el compilador.
ArrayTypeMismatchException
Se produce una excepción de tipo ArrayTypeMismatchException cuando se intenta almacenar un elemento del tipo incorrecto dentro de una matriz. En el ejemplo siguiente se produce una ArrayTypeMismatchException excepción al intentar almacenar un valor numérico en una matriz de cadenas.
string[] names = { "Dog", "Cat", "Fish" };
Object[] objs = (Object[])names;
Object obj = (Object)13;
objs[2] = obj; // ArrayTypeMismatchException occurs
DivideByZeroException
Se produce una excepción de tipo DivideByZeroException al intentar dividir un número entero o un número decimal por cero. En el ejemplo siguiente se produce una excepción al realizar una DivideByZeroException división de enteros.
int number1 = 3000;
int number2 = 0;
Console.WriteLine(number1 / number2); // DivideByZeroException occurs
Nota:
Dividir un valor de punto flotante por cero no produce una excepción; da como resultado infinito positivo, infinito negativo o no un número (NaN), según las reglas de aritmética IEEE 754.
FormatException
Se produce una excepción de tipo FormatException cuando el formato de un argumento no es válido o cuando una cadena de formato compuesto no está bien formada. En el ejemplo siguiente se produce una FormatException excepción al intentar convertir una cadena en un entero.
int valueEntered;
string userValue = "two";
valueEntered = int.Parse(userValue); // FormatException occurs
IndexOutOfRangeException
Se produce una excepción de tipo IndexOutOfRangeException cuando se intenta obtener acceso a un elemento de una matriz o colección con un índice que está fuera de sus límites. En el ejemplo siguiente se produce una IndexOutOfRangeException excepción al intentar asignar el último elemento de la values1 matriz al último elemento de la 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
Se produce una excepción de tipo InvalidCastException al intentar una conversión no válida o una conversión explícita. En el ejemplo siguiente se produce una excepción de tipo InvalidCastException al intentar convertir una cadena de tipo object en una variable int.
object obj = "This is a string";
int num = (int)obj;
Excepción de referencia nula
Se produce una excepción de tipo NullReferenceException al intentar obtener acceso a un miembro en un tipo cuyo valor es NULL. Se muestran dos ejemplos. En el primer ejemplo, se lanza una excepción NullReferenceException al intentar acceder a un elemento de un arreglo nulo. En el segundo ejemplo lanza un NullReferenceException al intentar acceder a un método de una cadena nula.
int[] values = null;
for (int i = 0; i <= 9; i++)
values[i] = i * 2;
string? lowCaseString = null;
Console.WriteLine(lowCaseString.ToUpper());
OverflowException
Se produce una excepción de tipo OverflowException cuando una operación aritmética intenta asignar un resultado que está fuera del intervalo del tipo de datos de destino. En el ejemplo siguiente se produce una OverflowException excepción al intentar convertir un decimal valor de 400 en una byte variable.
decimal x = 400;
byte i;
i = (byte)x; // OverflowException occurs
Console.WriteLine(i);
Resumen
Estos son algunos de los aspectos más importantes que debe recordar de esta unidad:
- El entorno de ejecución de .NET produce una excepción cuando se produce un error en una operación.
- El tipo de excepción depende del código que provoca la excepción.
- La aplicación debe detectar excepciones en tiempo de ejecución.