denom[i] + ' равно ' + numer[i]/denom[i]);
}
catch (DivideByZeroException) {
Console.WriteLine('Делить на нуль нельзя!');
}
catch (IndexOutOfRangeException) {
Console.WriteLine('Подходящий элемент не найден.'); throw; // сгенерировать исключение повторно
}
}
}
}
class RethrowDemo { static void Main() { try {
Rethrow.GenException ();
}
catch(IndexOutOfRangeException) {
// перехватить исключение повторно
Console.WriteLine('Неисправимая ошибка - программа прервана.');
}
}
}
В этом примере программы ошибки из-за деления на нуль обрабатываются локально в методе GenException (), но ошибка выхода за границы массива генерируется повторно. В данном случае исключение IndexOutOfRangeException обрабатывается в методе Main ().
Использование блока finally
Иногда требуется определить кодовый блок, который будет выполняться после выхода из блока try/catch. В частности, исключительная ситуация может возникнуть в связи с ошибкой, приводящей к преждевременному возврату из текущего метода. Но в этом методе мог быть открыт файл, который нужно закрыть, или же установлено сетевое соединение, требующее разрывания. Подобные ситуации нередки в программировании, и поэтому для их разрешения в C# предусмотрен удобный способ: воспользоваться блоком finally.
Для того чтобы указать кодовый блок, который должен выполняться после блока try/catch, достаточно вставить блок finally в конце последовательности операторов try/catch. Ниже приведена общая форма совместного использования блоков try/ catch и finally.
try {
// Блок кода, предназначенный для обработки ошибок.
}
catch
// Обработчик исключения типа
}
catch (
// Обработчик исключения типа
finally {
// Код завершения обработки исключений.
}
Блок finally будет выполняться всякий раз, когда происходит выход из блока try/ catch, независимо от причин, которые к этому привели. Это означает, что если блок try завершается нормально или по причине исключения, то последним выполняется код, определяемый в блоке finally. Блок finally выполняется и в том случае, если любой код в блоке try или в связанных с ним блоках catch приводит к возврату из метода.
Ниже приведен пример применения блока finally.
// Использовать блок finally.
using System;
