Это очень хороший вопрос, и он довольно сложный.Давайте пройдем этот шаг за шагом:
try
{
throw new Exception("From Try");
}
catch
{
throw new Exception("From Catch");
}
В приведенном выше коде Exception («From Try») выбрасывается и перехватывается предложением catch (пока довольно просто).Предложение catch выдает свое собственное исключение, которое мы обычно ожидаем (потому что catch вложен в больший блок try-catch), чтобы быть пойманным немедленно, но ...
finally
{
throw new Exception("From Finally");
}
Предложение finally, который гарантированно (попытается) выполнить, приходит первым и выдает свое собственное исключение, перезаписывая исключение ("From Catch") , которое было выдано ранее.
«Обычное использование catch и finally вместе - получение и использование ресурсов в блоке try, обработка исключительных обстоятельств в блоке catch и освобождение ресурсов в блоке finally» - Статья MSDN
Следуя этой последовательности логики, мы должны стараться изо всех сил воздерживаться от написания кода в нашем catch и, наконец, блоков, которые подвержены исключениям.Если вас волнует ситуация, подобная той, которую вы представляли, я рекомендую записать исключения и связанную с ними информацию во внешний файл, который вы можете использовать для отладки.