C# Винятки - Try..Catch
C# Винятки
Під час виконання коду C# можуть виникати різні помилки: помилки кодування, зроблені програмістом, помилки через неправильне введення чи інші непередбачені речі.
Якщо виникає помилка, C# зазвичай зупиняється та генерує повідомлення про помилку. Технічний термін для цього такий: C# викличе виключення (викине помилку).
C# try та catch
Інструкція try
дозволяє визначити блок коду, який буде перевірено на помилки під час його виконання.
Інструкція catch
дозволяє визначити блок коду, який буде виконано, якщо в блоці try станеться помилка.
Ключові слова try
та catch
бувають парами:
Синтаксис
try
{
// Блок коду для try
}
catch (Exception e)
{
// Блок коду для обробки помилок
}
Розглянемо наступний приклад, де ми створюємо масив із трьох цілих чисел:
Це призведе до помилки, оскільки myNumbers[10] не існує.
int[] myNumbers = {1, 2, 3};
Console.WriteLine(myNumbers[10]); // error!
Повідомлення про помилку буде приблизно таким:
System.IndexOutOfRangeException: 'Index was outside the bounds of the array.'
Якщо сталася помилка, ми можемо використати try...catch
, щоб виявити помилку та виконати певний код для її обробки.
У наступному прикладі ми використовуємо змінну всередині блоку catch (e
) разом із вбудованою властивістю Message
, яка виводить повідомлення з описом винятку:
Приклад
try
{
int[] myNumbers = {1, 2, 3};
Console.WriteLine(myNumbers[10]);
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
Виведення буде:
Index was outside the bounds of the array.
Ви також можете вивести власне повідомлення про помилку:
Приклад
try
{
int[] myNumbers = {1, 2, 3};
Console.WriteLine(myNumbers[10]);
}
catch (Exception e)
{
Console.WriteLine("Щось пішло не комільфо.");
}
Виведення буде:
Щось пішло не комільфо.
Finally (Нарешті)
Інструкція finally
дозволяє виконувати код після try...catch
, незалежно від результату:
Приклад
try
{
int[] myNumbers = {1, 2, 3};
Console.WriteLine(myNumbers[10]);
}
catch (Exception e)
{
Console.WriteLine("Щось пішло не комільфо.");
}
finally
{
Console.WriteLine("Тепер 'try catch' завершено.");
}
Виведення буде:
Щось пішло не комільфо.
Тепер 'try catch' завершено.
Ключове слово throw
Інструкція throw
дозволяє створити спеціальну помилку.
Інструкція throw
використовується разом із класом винятків. У C# доступно багато класів винятків: ArithmeticException
, FileNotFoundException
, IndexOutOfRangeException
, TimeOutException
, тощо:
Приклад
static void checkAge(int age)
{
if (age < 18)
{
throw new ArithmeticException("У доступі відмовлено - вам має бути не менше 18 років.");
}
else
{
Console.WriteLine("Доступ надано - ти вже дебелий лобуряка!");
}
}
static void Main(string[] args)
{
checkAge(15);
}
У програмі з’явиться повідомлення про помилку:
System.ArithmeticException: 'У доступі відмовлено - вам має бути не менше 18 років.'
Якби age
становив 20, ви не отримали б виключення: