Читаем Язык программирования C#9 и платформа .NET5 полностью

    case string s when s.Equals("C#", StringComparison.OrdinalIgnoreCase):

      Console.WriteLine("Good choice, C# is a fine language.");

                      // Хороший выбор. C# - замечательный язык.

      break;

    default:

      Console.WriteLine("Well...good luck with that!");

                      // Хорошо, удачи с этим!

      break;

  }

  Console.WriteLine;

}

Здесь к оператору switch добавляется новое измерение, поскольку порядок следования операторов case теперь важен. При использовании образца с константами каждый оператор case обязан быть уникальным. В случае применения образца с типами это больше не так. Например, следующий код будет давать совпадение для каждого целого числа в первом операторе case, а второй и третий оператор case никогда не выполнятся (на самом деле такой код даже не скомпилируется):

switch (choice)

{

  case int i:

    //do something

    break;

  case int i when i == 0:

    //do something

    break;

  case int i when i == -1:

    // do something

    break;

}

В первоначальном выпуске C# 7 возникало небольшое затруднение при сопоставлении с образцом, когда в нем использовались обобщенные типы. В версии C# 7.1 проблема была устранена. Обобщенные типы рассматриваются в главе 10.

На заметку! Все продемонстрированные ранее улучшения сопоставления с образцом в C# 9.0 также можно применять в операторах switch.

<p id="AutBody_Root137">Использование выражений switch (нововведение в версии 8.0)</p>

В версии C# 8 появились выражения switch, позволяющие присваивать значение переменной в лаконичном операторе. Рассмотрим версию C# 7 метода FromRainbowClassic, который принимает имя цвета и возвращает для него шестнадцатеричное значение:

static string FromRainbowClassic(string colorBand)

{

  switch (colorBand)

  {

    case "Red":

      return "#FF0000";

    case "Orange":

      return "#FF7F00";

    case "Yellow":

      return "#FFFF00";

    case "Green":

      return "#00FF00";

    case "Blue":

      return "#0000FF";

    case "Indigo":

      return "#4B0082";

    case "Violet":

      return "#9400D3";

    default:

      return "#FFFFFF";

  };

}

С помощью новых выражений switch в C# 8 код предыдущего метода можно переписать следующим образом, сделав его гораздо более лаконичным:

static string FromRainbow(string colorBand)

{

  return colorBand switch

  {

    "Red" => "#FF0000",

    "Orange" => "#FF7F00",

    "Yellow" => "#FFFF00",

    "Green" => "#00FF00",

    "Blue" => "#0000FF",

    "Indigo" => "#4B0082",

    "Violet" => "#9400D3",

    _ => "#FFFFFF",

  };

}

В приведенном примере присутствует много непонятного, начиная с лямбда-операции (=>) и заканчивая отбрасыванием (_). Все это будет раскрыто позже в книге и данный пример окончательно прояснится.

Перед тем, как завершить обсуждение темы выражений switch, давайте рассмотрим еще один пример, в котором вовлечены кортежи. Кортежи подробно раскрываются в главе 4, а пока считайте кортеж простой конструкцией, которая содержит более одного значения и определяется посредством круглых скобок, подобно следующему кортежу, содержащему значения string и int:

(string, int)

В показанном ниже примере два значения, передаваемые методу RockPapeScissors, преобразуются в кортеж, после чего выражение switch вычисляет два значения в единственном выражении. Такой прием позволяет сравнивать в операторе switch более одного выражения:

//Switch expression with Tuples

static string RockPaperScissors(string first, string second)

{

  return (first, second) switch

  {

    ("rock", "paper") => "Paper wins.",

    ("rock", "scissors") => "Rock wins.",

    ("paper", "rock") => "Paper wins.",

    ("paper", "scissors") => "Scissors wins.",

    ("scissors", "rock") => "Rock wins.",

    ("scissors", "paper") => "Scissors wins.",

    (_, _) => "Tie.",

  };

}

Чтобы вызвать метод RockPaperScissors, добавьте в метод Main следующие строки кода:

Перейти на страницу:

Похожие книги

97 этюдов для архитекторов программных систем
97 этюдов для архитекторов программных систем

Успешная карьера архитектора программного обеспечения требует хорошего владения как технической, так и деловой сторонами вопросов, связанных с проектированием архитектуры. В этой необычной книге ведущие архитекторы ПО со всего света обсуждают важные принципы разработки, выходящие далеко за пределы чисто технических вопросов.?Архитектор ПО выполняет роль посредника между командой разработчиков и бизнес-руководством компании, поэтому чтобы добиться успеха в этой профессии, необходимо не только овладеть различными технологиями, но и обеспечить работу над проектом в соответствии с бизнес-целями. В книге более 50 архитекторов рассказывают о том, что считают самым важным в своей работе, дают советы, как организовать общение с другими участниками проекта, как снизить сложность архитектуры, как оказывать поддержку разработчикам. Они щедро делятся множеством полезных идей и приемов, которые вынесли из своего многолетнего опыта. Авторы надеются, что книга станет источником вдохновения и руководством к действию для многих профессиональных программистов.

Билл де Ора , Майкл Хайгард , Нил Форд

Программирование, программы, базы данных / Базы данных / Программирование / Книги по IT
Программирование. Принципы и практика использования C++ Исправленное издание
Программирование. Принципы и практика использования C++ Исправленное издание

Специальное издание самой читаемой и содержащей наиболее достоверные сведения книги по C++. Книга написана Бьярне Страуструпом — автором языка программирования C++ — и является каноническим изложением возможностей этого языка. Помимо подробного описания собственно языка, на страницах книги вы найдете доказавшие свою эффективность подходы к решению разнообразных задач проектирования и программирования. Многочисленные примеры демонстрируют как хороший стиль программирования на С-совместимом ядре C++, так и современный -ориентированный подход к созданию программных продуктов. Третье издание бестселлера было существенно переработано автором. Результатом этой переработки стала большая доступность книги для новичков. В то же время, текст обогатился сведениями и методиками программирования, которые могут оказаться полезными даже для многоопытных специалистов по C++. Не обойдены вниманием и нововведения языка: стандартная библиотека шаблонов (STL), пространства имен (namespaces), механизм идентификации типов во время выполнения (RTTI), явные приведения типов (cast-операторы) и другие. Настоящее специальное издание отличается от третьего добавлением двух новых приложений (посвященных локализации и безопасной обработке исключений средствами стандартной библиотеки), довольно многочисленными уточнениями в остальном тексте, а также исправлением множества опечаток. Книга адресована программистам, использующим в своей повседневной работе C++. Она также будет полезна преподавателям, студентам и всем, кто хочет ознакомиться с описанием языка «из первых рук».

Бьерн Страуструп , Бьёрн Страуструп , Валерий Федорович Альмухаметов , Ирина Сергеевна Козлова

Программирование, программы, базы данных / Базы данных / Программирование / Учебная и научная литература / Образование и наука / Книги по IT