Выбор ответа Junior Исключения спрашивают часто обновлено

throw против throw ex

Вопрос

Чем throw; отличается от throw ex; внутри catch (Exception ex)?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: throw; сохраняет исходный стек вызовов, throw ex; его перезаписывает. throw; пробрасывает то же исключение дальше, и стек указывает на настоящее место ошибки. throw ex; бросает объект заново, стек начинается со строки в catch, и информация о первоисточнике теряется. throw; без аргумента допустим только…

Варианты ответа

  1. Разницы нет: это синонимы, компилятор генерирует один и тот же IL
  2. throw; сохраняет исходный стек вызовов, throw ex; его перезаписываетправильный ответ
  3. throw ex; сохраняет исходный стек, а throw; его очищает
  4. throw; можно использовать только в finally, а не в catch

Разбор

throw; пробрасывает то же исключение дальше, и стек указывает на настоящее место ошибки. throw ex; бросает объект заново, стек начинается со строки в catch, и информация о первоисточнике теряется. throw; без аргумента допустим только внутри catch. Если нужно бросить другое исключение, исходное передают в InnerException.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.