Повторное выбрасывание исключения в 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".