Category Archives: Мысли вслух

Идея насчет синтаксиса обработки исключений

Written by elwood

Часто приходится писать обработчики исключений, которые делают одно и то же. Например, в следующем кусочке кода нам необходимо среагировать на исключения типа Exception1 и Exception2 записью в лог-файл :

try {
  // Блок, который может вызвать исключения Exception1, Exception2
  // или исключение любого другого типа
} catch (Exception1 exc) {
  logger.WarnException("An exception has been occured : {0}", exc);
} catch (Exception2 exc) {
  logger.WarnException("An exception has been occured : {0}", exc);
}

Проблема в том, что мы не можем никак избежать дублирования кода. Единственный выход – создать отдельный метод-обработчик, в котором и инкапсулировать логику. Но – во-первых, это может оказаться неудобным, поскольку локальные переменные, которые могут понадобиться в обработчике, придется передавать при вызове функции, а во-вторых, сам по себе вызов функции – это еще несколько тактов процессора.
Хотелось бы иметь способ, который бы позволял писать, скажем, следующим образом :

try {
  // 
} catch (Exception1, Exception2 exc as Exception) {
  // exc имеет тип Exception
}

(more…)