Switch Expressions - Выражения переключатели - Новинка в C# 8
Хорошая новость, теперь можно реализовать SWITCH по новому.
В C# 8 версии вводятся выражения-переключатели, которые реализуют более краткий синтаксис возвращения значения.
Вот синтаксис выражения SWITCH на примере:
static string Display(object o) => o switch
{
Point { X: 0, Y: 0 } => "origin",
Point { X: var x, Y: var y } => $"({x}, {y})",
_ => "unknown"
};
В этом примере сначала проверяется соответствие шаблону типа Point, а затем шаблону свойств внутри {фигурных скобок}.
Затем символ подчеркивания "_" Описывает шаблон сброса, аналогичный «default:» для операторов switch.
Можно усложнить пример с использованием кортежей и позиционирования, как в следующем примере:
static State ChangeState(State current, Transition transition, bool hasKey) =>
(current, transition) switch
{
(Opened, Close) => Closed,
(Closed, Open) => Opened,
(Closed, Lock) when hasKey => Locked,
(Locked, Unlock) when hasKey => Closed,
_ => throw new InvalidOperationException($"Invalid transition")
};
Здесь нам не надо определять переменную или явный тип для каждого из случаев. Вместо этого компилятор сам сопоставляет тестируемый кортеж с кортежами, определенными для каждого из случаев.
Все это позволяет нам писать декларативный код, который фиксирует наши намерения, вместо процедурного кода, который реализует тесты для него. Компилятор становится ответственным за реализацию этого скучного процедурного кода.
P.S. Переводил сам, как понял, надеюсь суть передана верно.
P.P.S. Спасибо за внимание.