Применение нескольких операторов catch C#

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

С одним оператором try можно связать несколько операторов catch. И на практике это делается довольно часто. Но все операторы catch должны перехватывать исключения разного типа. В качестве примера ниже приведена программа, в которой перехватываются ошибки выхода за границы массива и деления на нуль.

// Использовать несколько операторов catch.

using System;

class ExcDemo4 {
   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 (DivideByZeroException) {
            Console .WriteLine ("Делить на нуль нельзя!");
         }
         catch (IndexOutOfRangeException) {
            Console.WriteLine(
                               "Подходящий элемент не найден.");
         }
      }
   }
}

Вот к какому результату приводит выполнение этой программы:
   4 / 2 равно 2 Делить на нуль нельзя!
   16 / 4 равно 4
   32 / 4 равно 8
   Делить на нуль нельзя!
   128 / 8 равно 16
   Подходящий элемент не найден.
   Подходящий элемент не найден.

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