Перевірка винятків, створених компілятором
- 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 нижче прикладі створюється виняток під час спроби перетворити рядок на ціле число.
int valueEntered;
string userValue = "two";
valueEntered = int.Parse(userValue); // FormatException occurs
IndexOutOfRangeException
Під час спроби отримати доступ до елемента масиву 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
НеприпустимийcastException
Під час спроби неприпустимого перетворення або явного перетворення стається виняток типу InvalidCastException . У наведеному InvalidCastException нижче прикладі під час спроби привести object рядок типу до int змінної.
object obj = "This is a string";
int num = (int)obj;
NullReferenceException
Під час спроби отримати доступ до учасника для типу, значення якого дорівнює null, виникає виняток типу NullReferenceException . Показано два приклади. У першому прикладі NullReferenceException під час спроби отримати доступ до елемента null-масиву стається помилка. Другий приклад скидає під час 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 виникає, коли арифметична операція намагається призначити результат за межами діапазону цільового типу даних. У наведеному OverflowException нижче прикладі створюється виняток під час спроби перетворити decimal значення 400 на змінну byte .
decimal x = 400;
byte i;
i = (byte)x; // OverflowException occurs
Console.WriteLine(i);
Коротко
Ось кілька важливих речей, які слід пам'ятати з цієї одиниці:
- Під час виконання .NET виникає виняткова ситуація, коли не вдається виконати операцію.
- Тип винятку залежить від коду, який спричиняє виняток.
- Програма має спіймати винятки середовища виконання.
Перевірте свої знання
Зворотний зв’язок
Чи була ця сторінка корисна?
Ні
Потрібна допомога із цією темою?
Хочете скористатися Ask Learn, щоб отримати пояснення чи інструкції із цієї теми?