Рейтинговые книги
Читем онлайн Язык программирования C#9 и платформа .NET5 - Эндрю Троелсен

Шрифт:

-
+

Интервал:

-
+

Закладка:

Сделать
1 ... 44 45 46 47 48 49 50 51 52 ... 407
код будет давать совпадение для каждого целого числа в первом операторе 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.

Использование выражений switch (нововведение в версии 8.0)

В версии 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() следующие строки кода:

Console.WriteLine(RockPaperScissors("paper","rock"));

Console.WriteLine(RockPaperScissors("scissors","rock"));

Мы еще вернемся к этому примеру в главе 4, где будут представлены кортежи.

Резюме

 Цель настоящей главы заключалась в демонстрации многочисленных ключевых аспектов языка программирования С#. Мы исследовали привычные конструкции, которые могут быть задействованы при построении любого приложения. После ознакомления с ролью объекта приложения вы узнали о том, что каждая исполняемая программа на C# должна иметь тип, определяющий метод Main(), либо явно, либо с использованием операторов верхнего уровня. Данный метод служит точкой входа в программу.

Затем были подробно описаны встроенные типы данных C# и разъяснено, что применяемые для их представления ключевые слова (например, int) на самом деле являются сокращенными обозначениями полноценных типов из пространства имен System (System.Int32 в данном случае). С учетом этого каждый тип данных C# имеет набор встроенных членов. Кроме того, обсуждалась роль расширения и сужения, а также ключевых слов checked и unchecked.

В завершение главы рассматривалась роль неявной типизации с использованием ключевого слова var. Как было отмечено, неявная типизация наиболее полезна при работе с моделью программирования LINQ. Наконец, мы бегло взглянули на различные конструкции С#, предназначенные для организации циклов и принятия решений.

Теперь, когда вы понимаете некоторые базовые механизмы, в главе 4 завершится исследование основных средств языка. После этого вы будете хорошо подготовлены к изучению объектно-ориентированных возможностей С#, которое начнется в главе 5.

Глава 4

Главные конструкции программирования на С#: часть 2

В настоящей главе завершается обзор основных аспектов языка программирования С#, который был начат в главе 3. Первым делом мы рассмотрим детали манипулирования массивами с использованием синтаксиса C# и продемонстрируем функциональность, содержащуюся внутри связанного класса System.Array.

Далее мы выясним различные подробности, касающиеся построения методов, за счет исследования ключевых слов out, ref и params. В ходе дела мы объясним роль необязательных и именованных параметров. Обсуждение темы методов завершится перегрузкой методов.

Затем будет показано, как создавать типы перечислений и структур, включая детальное исследование отличий между типами значений и ссылочными типами. В конце главы объясняется роль типов данных, допускающих null, и связанных с ними операций.

После освоения материала главы вы можете смело переходить к изучению объектно-ориентированных возможностей языка С#, рассмотрение которых начнется в главе 5.

Понятие массивов C#

Как вам уже наверняка известно, массив — это набор элементов данных, для доступа к которым применяется числовой индекс. Выражаясь более конкретно, массив представляет собой набор расположенных рядом элементов данных одного и того же типа (массив элементов int, массив элементов string, массив элементов SportsCar и т.д.). Объявлять, заполнять и получать доступ к массиву в языке C# довольно просто. В целях иллюстрации создайте новый проект консольного

1 ... 44 45 46 47 48 49 50 51 52 ... 407
На этой странице вы можете бесплатно читать книгу Язык программирования C#9 и платформа .NET5 - Эндрю Троелсен бесплатно.

Оставить комментарий