}
catch (DivideByZeroException) {
Console.WriteLine('Делить на нуль нельзя!');
}
catch (IndexOutOfRangeException) {
Console.WriteLine('Подходящий элемент не найден.');
}
}
}
}
Вот к какому результату приводит выполнение этой программы.
4/2 равно 2
Делить на нуль нельзя!
16/4 равно 4 32/4 равно 8 Делить на нуль нельзя!
128 / 8 равно 16 Подходящий элемент не найден.
Подходящий элемент не найден.
Как следует из приведенного выше результата, каждый оператор catch реагирует только на свой тип исключения.
Вообще говоря, операторы catch выполняются по порядку их следования в программе. Но при этом выполняется только один блок catch, в котором тип исключения совпадает с типом генерируемого исключения. А все остальные блоки catch пропускаются.
Перехват всех исключений
Время от времени возникает потребность в перехвате всех исключений независимо от их типа. Для этой цели служит оператор catch, в котором тип и переменная исключения не указываются. Ниже приведена общая форма такого оператора.
catch {
// обработка исключений
}
С помощью такой формы создается 'универсальный' обработчик всех исключений, перехватываемых в программе.
Ниже приведен пример такого 'универсального' обработчика исключений. Обратите внимание на то, что он перехватывает и обрабатывает оба исключения, IndexOutOfRangeException и DivideByZeroException, генерируемых.в программе.
// Использовать 'универсальный' обработчик исключений.
using System;
class ExcDemo5 {
static void Main() {
// Здесь массив numer длиннее массива denom.
int[] numer = { 4, 8, 16, 32, 64, 128, 256, 512 };
int[] denom = { 2, 0, 4, 4, 0, 8 };
for (int i=0; i < numer.Length; i++) {
try {
Console.WriteLine(numer[i] + ' / ' +
denom[i] + ' равно ' + numer[i]/denom[i]);
}
catch { // 'Универсальный' перехват.
Console.WriteLine ('Возникла некоторая исключительная ситуация.');
}
}
}
}
При выполнении этой программы получается следующий результат.
4/2 равно 2
