Создаем портфолио за 1 месяц
К концу месяца: 4 классных проекта в вашем портфолио! Стоимость: 100$. Подробности...
⊗csPmEcRT 401 of 436 menu
◀ ▶

Повторное выбрасывание исключения в C#

Иногда в catch нужно записать факт ошибки и передать сбой дальше. Для этого используют throw; без объекта. Исходная трассировка, которую видит среда выполнения, сохраняется:

try { try { Console.WriteLine(int.Parse("x")); } catch (FormatException) { Console.WriteLine("logged"); throw; } } catch (FormatException ex) { Console.WriteLine(ex.Message); }

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

void ParseLine(string raw) { try { Console.WriteLine(int.Parse(raw)); } catch (FormatException) { Console.WriteLine("warn"); throw; } } try { ParseLine("9z"); } catch (FormatException ex) { Console.WriteLine("outer"); }

Сделайте вложенные try-catch. Во внутреннем try вызовите int.Parse("x"). Во внутреннем catch (FormatException) выведите "inner" и выполните throw;. Во внешнем catch (FormatException) выведите "outer".

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить