Проверка исключений, созданных компилятором
- 10 минут
Исключения создаются средой выполнения .NET или кодом в программе. Тип исключения зависит от кода, вызывающего исключение.
Исключения, создаваемые компилятором
Среда выполнения .NET создает исключения при сбое базовых операций. Ниже приведен краткий список исключений среды выполнения и их условий ошибки:
-
ArrayTypeMismatchException: возникает, если массив не может хранить заданный элемент, так как фактический тип элемента несовместим с фактическим типом массива. -
DivideByZeroException: возникает при попытке разделить целочисленное значение на ноль. -
FormatException: возникает, если формат аргумента недопустим. -
IndexOutOfRangeException: возникает при попытке индексировать массив, если индекс меньше нуля или за пределами границ массива. -
InvalidCastException: выбрасывается, когда явное преобразование из базового типа в интерфейс или производный тип приводит к ошибке во время выполнения. -
NullReferenceException: возникает при попытке ссылаться на объект, значение которого равно NULL. -
OverflowException: выбрасывается при переполнении в результате арифметической операции в проверенном контексте.
Примеры кода для исключений, созданных компилятором
В следующих примерах кода показан пример кода, который вызывает исключение, созданное компилятором.
ArrayTypeMismatchException
Исключение типа ArrayTypeMismatchException возникает при попытке сохранить элемент неправильного типа в массиве. В следующем примере возникает ArrayTypeMismatchException исключение при попытке сохранить числовое значение в строковом массиве.
string[] names = { "Dog", "Cat", "Fish" };
Object[] objs = (Object[])names;
Object obj = (Object)13;
objs[2] = obj; // ArrayTypeMismatchException occurs
DivideByZeroException
Исключение типа DivideByZeroException возникает при попытке разделить целое число или десятичное число на ноль. В следующем примере при выполнении целочисленного деления выбрасывается DivideByZeroException исключение.
int number1 = 3000;
int number2 = 0;
Console.WriteLine(number1 / number2); // DivideByZeroException occurs
Замечание
Деление значения с плавающей запятой на ноль не приводит к исключению; это приводит к положительной бесконечности, отрицательной бесконечности или NaN, согласно правилам арифметики IEEE 754.
FormatException
Исключение типа FormatException возникает, если формат аргумента недопустим или если строка составного формата неправильно сформирована. Следующий пример вызывает FormatException исключение при попытке конвертировать строку в целое число.
int valueEntered;
string userValue = "two";
valueEntered = int.Parse(userValue); // FormatException occurs
Исключение: индекс вне диапазона
Исключение типа IndexOutOfRangeException возникает при попытке получить доступ к элементу массива или коллекции с индексом, который находится за пределами его границ. В следующем примере происходит исключение IndexOutOfRangeException, когда пытаются присвоить последний элемент массива values1 последнему элементу массива values2.
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
Исключение типа InvalidCastException выбрасывается при попытке недопустимого приведения или явного преобразования. В следующем примере возникает InvalidCastException при попытке приведения object типа string к переменной int.
object obj = "This is a string";
int num = (int)obj;
NullReferenceException
Исключение типа NullReferenceException возникает при попытке доступа к члену типа, значение которого равно NULL. Показаны два примера. В первом примере возникает исключение NullReferenceException, когда предпринимается попытка доступа к элементу нулевого массива. Второй пример создает исключение NullReferenceException при попытке доступа к методу строки NULL.
int[] values = null;
for (int i = 0; i <= 9; i++)
values[i] = i * 2;
string? lowCaseString = null;
Console.WriteLine(lowCaseString.ToUpper());
OverflowException
Исключение типа OverflowException возникает, когда арифметическая операция пытается назначить результат, который находится за пределами диапазона целевого типа данных. В следующем примере при попытке преобразовать значение 400 в переменную возникает исключение OverflowException.
decimal x = 400;
byte i;
i = (byte)x; // OverflowException occurs
Console.WriteLine(i);
Обзор
Ниже приведены некоторые важные моменты, которые следует помнить из этого урока:
- Среда выполнения .NET создает исключение при сбое операции.
- Тип исключения зависит от кода, вызывающего исключение.
- Приложение должно перехватывать исключения среды выполнения.
Проверьте свои знания
Обратная связь
Были ли сведения на этой странице полезными?
Нет
Нужна помощь с этой темой?
Хотите попробовать использовать Ask Learn для уточнения или руководства по этой теме?