Перехват всех исключений C#

Перехват всех исключений C#, Перехват исключений в C#, Исключения в C#, C# Полное руководство Герберт Шилдт, Язык программирования C#, C# полное руководство

Время от времени возникает потребность в перехвате всех исключений независимо от их типа. Для этой цели служит оператор 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
   Возникла некоторая исключительная ситуация.
   16 / 4 равно 4
   32 / 4 равно 8
   Возникла некоторая исключительная ситуация.
   128 / 8 равно 16
   Возникла некоторая исключительная ситуация.
   Возникла некоторая исключительная ситуация.

Применяя “универсальный” перехват, следует иметь в виду, что его блок должен располагаться последним по порядку среди всех блоков catch.
На заметку! В подавляющем большинстве случаев “универсальный” обработчик исключений не применяется. Как правило, исключения, которые могут быть сгенерированы в коде, обрабатываются по отдельности. Неправильное использование “универсального” обработчика может привести к тому, что ошибки, перехватывавшиеся при тестировании программы, маскируются. Кроме того, организовать надлежащую обработку всех исключительных ситуаций в одном обработчике не так-то просто. Иными словами, “универсальный” обработчик исключений может оказаться пригодным лишь в особых случаях, например в инструментальном средстве анализа кода во время выполнения.