Попробуйте поймать и наконец заблокировать экскрецию
Привет Эксперты,
Я прошел через Google, прежде чем разместить здесь вопрос, но не получил никакого удовлетворительного ответа.
У меня есть ниже три условия.
private string ExcetionTest() { try { throw new Exception("E1"); } catch (Exception ex) { throw new Exception("E2"); } finally { throw new Exception("E3"); } }
Случай 1.
private void button4_Click(object sender, EventArgs e) { This. ExcetionTest(); }
Случай 2.
private void button4_Click(object sender, EventArgs e) { try { This. ExcetionTest(); } catch (Exception ex) { Throw ex; } finally { MessageBox.Show("finally"); } }
Случай 3.
private void Form1_Load(object sender, EventArgs e) { try { throw new Exception("E1"); } catch (Exception ex) { throw new Exception("E2"); } finally { throw new Exception("E3"); } }
Когда я начинаю отладку первого случая, блок finally никогда не будет поражен, управление остановлено в блоке catch.
При отладке второго случая попробуйте поймать и, наконец, блок метода ExcetionTest() будет отлажен должным образом, но внешний, наконец, снова никогда не будет поражен.
Случай 3 действительно не понятен, когда я начинаю отлаживать один и тот же код в событии загрузки формы, пытаюсь поймать и, наконец, блок выполняется правильно. Здесь возникает вопрос: в чем разница между случаем 1 и случаем 3? Почему, наконец, ударил в случае.3, но не упаковал 1.
Спасибо,
BillWoodruff
Вы пробовали установить точку останова в первой строке кода в каждом случае, а затем одношаговый (F11), чтобы наблюдать, как движется поток управления ? Имейте в виду, что бросать исключение в исключение немного странно.
digvijay dobhal
Да, я сделал один шаг, но контроль не перешел к последнему блоку в случае 1, а остановился в улове. в то время как в случае 3 контрольный ход, наконец, после улова.
Sergey Alexandrovich Kryukov
Зачем искать "ответы" там, где нужно применять общее понимание и просто логику, а выводы делать самому? Есть какие-то особые опасения?
И зачем обсуждать явно патологический код? (Ну, я бы понял, что это делается просто для того, чтобы получить некоторое понимание.) Зачем возиться с бланками?
—СА