Синтаксис регистра переключателя указывает тип данных

Сегодня на работе я делал обзор кода, как и сейчас, и снова, но сегодня я увидел синтаксис, которого раньше не видел. Я искал в интернете это безрезультатно, и что еще более интересно, что, несмотря на использование той же версии 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,
Другие вопросы по тегам