Назад Вперед Зміст

Обробка винятків

Виняток є помилкою, що відбувається під час виконання програми. За допомогою підсистеми обробки винятків для C# можна обробляти такі помилки, не викликаючи краху програми. Для цього використовується інструкція try-catch.

Оператор try-catch

Ця інструкція складається з блоку try, за яким слідує одна або кілька пропозицій catch, в яких визначаються обробники для різних винятків.

Приклад 1

У програмі вводиться два числа та обчислюється їх частка.

Вся програма міститься в блок try. У блоці catch оператор виводить повідомлення про помилку.

Якщо в пропозиції catch немає параметрів, то вона працює для будь-яких винятків.

Обробка винятків у мові програмування C#

Приклад: ділення з обробкою помилок

Програма зчитує два числа та виконує ділення. Якщо виникає помилка (наприклад, ділення на нуль), вона буде оброблена блоком try-catch.

static void Main(string[] args)
{
    int i, n, m;
    try
    {
        Console.WriteLine("Введення");
        n = Convert.ToInt32(Console.ReadLine());
        i = Convert.ToInt32(Console.ReadLine());
        m = n / i;
        Console.WriteLine("Вивід {0}:{1}={2}", n, i, m);
    }
    catch
    {
        Console.WriteLine("Помилка!!");
    }
    Console.ReadKey();
}
  

Пояснення:

Результати виконання програми
n (ділене) i (дільник) Результат Вивід
10 2 10 / 2 = 5 Вивід 10:2=5
10 0 Ділення на 0 Помилка!!
abc 2 Формат введення некоректний Помилка!!
8 xyz Формат введення некоректний Помилка!!

Якщо у програмі не виникають винятки, то виконуються оператори із блоку try. Оператори блоку catch пропускаються.

Якщо у програмі виникне будь-який виняток, то виконання операторів блоку try переривається і починають виконуватися оператори з блоку catch.

У даному випадку і при діленні на 0, і при неправильному введенні виводиться те саме повідомлення.

Основні винятки

Якщо ми хочемо по-різному обробляти винятки, то його тип потрібно вказувати в блоці catch як параметр.

Приклад 2

Змінимо попереднє завдання. Тепер оброблятимемо окремо два винятки: ділення на 0 (DivideByZeroException) та неправильний формат вхідного рядка (FormatException).

static void Main(string[] args)
{
    int i, n, m;
    try
    {
        Console.WriteLine("Введіть два числа:");
        n = Convert.ToInt32(Console.ReadLine());
        i = Convert.ToInt32(Console.ReadLine());
        m = n / i;
        Console.WriteLine("Результат: {0} / {1} = {2}", n, i, m);
    }
    catch (FormatException)
    {
        Console.WriteLine("Введений рядок мав неправильний формат!");
    }
    catch (DivideByZeroException)
    {
        Console.WriteLine("Ділення на 0!!!");
    }
    Console.ReadKey();
}
 

Тестування прикладу з діленням

Вхідні значення (n, i) Очікуваний результат Фактичний результат Примітка
1 10, 2 10:2=5 10:2=5 Успішне ділення
2 15, 3 15:3=5 15:3=5 Успішне ділення
3 7, 0 Помилка!! Помилка!! Ділення на нуль
4 abc, 5 Помилка!! Помилка!! Невірний ввід

Надалі ми будемо самі генерувати винятки та обробляти їх

Назад Вперед Зміст