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

Фильтр when

В catch можно добавить when (условие). Если тип исключения подходит, но условие ложно, этот обработчик пропускают и ищут следующий. Так отбирают исключения по данным, не раздувая число типов в catch.

Синтаксис

catch (Exception ex) when (условие) { }

Пример

Давайте поймаем исключение, когда длина сообщения больше 3:

using System; class Program { static void Main() { try { throw new InvalidOperationException("abcde"); } catch (Exception ex) when (ex.Message.Length > 3) { Console.WriteLine("filtered"); } } }

Результат выполнения кода:

"filtered"

Пример

Давайте отклоним короткое сообщение фильтром и поймаем снаружи:

using System; class Program { static void Main() { try { try { throw new InvalidOperationException("ab"); } catch (Exception ex) when (ex.Message.Length > 3) { Console.WriteLine("inner"); } } catch (Exception) { Console.WriteLine("outer"); } } }

Результат выполнения кода:

"outer"

Пример

Давайте выведем сообщение при срабатывании фильтра:

using System; class Program { static void Main() { try { throw new InvalidOperationException("abcde"); } catch (Exception ex) when (ex.Message == "abcde") { Console.WriteLine(ex.Message); } } }

Результат выполнения кода:

"abcde"

Смотрите также

  • блок catch,
    к которому добавляют when
  • блок try,
    где возникает исключение
  • оператор throw,
    который создаёт исключение для фильтра
  • блок finally,
    который выполняется после catch
← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить