Синтаксис регистра переключателя указывает тип данных
Сегодня на работе я делал обзор кода, как и сейчас, и снова, но сегодня я увидел синтаксис, которого раньше не видел. Я искал в интернете это безрезультатно, и что еще более интересно, что, несмотря на использование той же версии Visual Studio, то есть 2017 Enterprise, я получаю синтаксическую ошибку дома, когда пытаюсь воссоздать то, что видел на работе сегодня. Это выглядело примерно так:
switch (someObject) {
case TypeOne valueOne: action1(); break;
case TypeTwo valueTwo: action2(); break;
// ... and so on
}
Другими словами, похоже, что они проверяли как тип, так и значение за один раз. Но, как я уже сказал, я не могу найти его в Интернете, и у меня дома возникает ошибка синтаксиса. Я знаю, что в C# 7 есть много нового, особенно с точки зрения синтаксического сахара. Вы можете это объяснить?
1 ответ
Это новая особенность C# 7: оператор переключения сопоставления с образцом, который совпадает с типами.
Что делает этот код, давая первую ветку:
- Это проверяет, если
someObject
является, происходит от или реализует типTypeOne
, - Если так, это бросает
someObject
печататьTypeOne
который назначенvalueOne
, - Затем он входит в блок дела, где вы можете напрямую использовать
valueOne
,