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

Несколько блоков catch в C#

В одном try может произойти сбой разного типа. Решение - несколько блоков catch подряд. Среда выбирает первый блок, тип которого подходит:

try { // code that may fail } catch (FormatException) { // bad text } catch (DivideByZeroException) { // zero divisor }

Пусть нужно разобрать две строки как числа и поделить первое на второе. Ошибка формата и деление на ноль обрабатываются разными сообщениями:

void DivideStrings(string left, string right) { try { int x = int.Parse(left); int y = int.Parse(right); Console.WriteLine(x / y); } catch (FormatException) { Console.WriteLine("not a number"); } catch (DivideByZeroException) { Console.WriteLine("division by zero"); } } DivideStrings("10", "0"); DivideStrings("10", "two");

Более конкретный catch ставят выше общего. Сначала перечисляют узкие типы, которые нужны в задаче:

Dictionary<string, int> dct = new() { ["a"] = 1, ["b"] = 2 }; string keyText = "x"; try { int n = int.Parse(keyText); Console.WriteLine(dct["k" + n]); } catch (FormatException) { Console.WriteLine("bad key text"); } catch (KeyNotFoundException) { Console.WriteLine("bad key"); }

Даны строки left и right. В try преобразуйте обе через int.Parse и выведите частное. Для FormatException выведите "parse", для DivideByZeroException выведите "zero".

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