Вполне допустимо иметь несколько блоков захвата разных типов. Однако поведение таково, что первый блок-кандидат обрабатывает исключение.
Он не войдет в ОБА блоки. Первый блок catch, который соответствует типу исключения, будет обрабатывать это конкретное исключение, и никаких других, даже если оно было переброшено в обработчике. Любые последующие будут пропущены, как только исключение войдет в блок catch.
Для того, чтобы исключение было перехвачено в ОБАХ блоках, вам нужно либо вложить блоки так:
try
{
try
{
// Do something that throws ArithmeticException
}
catch(ArithmeticException arithException)
{
// This handles the thrown exception....
throw; // Rethrow so the outer handler sees it too
}
}
catch (Exception e)
{
// This gets hit as well, now, since the "inner" block rethrew the exception
}
В качестве альтернативы, вы можете фильтровать в универсальном обработчике исключений на основе определенного типа исключения.