Общий обработчик исключений в C#
Если нужен запасной вариант для любого сбоя,
добавляют catch (Exception ex).
Его ставят после всех конкретных типов.
Иначе общий блок перехватит исключение
раньше, и до узких catch выполнение
не дойдет:
try {
Console.WriteLine(int.Parse("x"));
} catch (FormatException) {
Console.WriteLine("format");
} catch (Exception ex) {
Console.WriteLine(ex.Message);
}
Общий обработчик удобен для логирования и вывода текста, когда тип сбоя заранее неизвестен:
try {
Dictionary<string, int> dct = new() { ["x"] = 1 };
Console.WriteLine(dct["y"]);
} catch (KeyNotFoundException) {
Console.WriteLine("missing");
} catch (Exception ex) {
Console.WriteLine("other: " + ex.Message);
}
В одном try разберите строку "0"
как число и поделите 10 на него.
Для DivideByZeroException выведите "zero",
для Exception выведите "any".
Поставьте блоки в правильном порядке.