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

  Console.WriteLine();

}

Здесь объяснять особо нечего: метод просто вызывает разнообразные члены, такие как

ToUpper()
и
Contains()
, на локальной переменной
string
, чтобы получить разные форматы и трансформации. Ниже приведен вывод:

***** Fun with Strings *****

=> Basic String functionality:

Value of firstName: Freddy

firstName has 6 characters.

firstName in uppercase: FREDDY

firstName in lowercase: freddy

firstName contains the letter y?: True

firstName after replace: Fred

Несмотря на то что вывод не выглядит особо неожиданным, вывод, полученный в результате вызова метода

Replace()
, может вводить в заблуждение. В действительности переменная
firstName
вообще не изменяется; взамен получается новая переменная
string
в модифицированном формате. Чуть позже мы еще вернемся к обсуждению неизменяемой природы строк.

Выполнение конкатенации строк

Переменные

string
могут соединяться вместе для построения строк большего размера с помощью операции
+
языка С#. Как вам должно быть известно, такой прием формально называется конкатенацией строк. Рассмотрим следующую вспомогательную функцию:

static void StringConcatenation()

{

  Console.WriteLine("=> String concatenation:");

  string s1 = "Programming the ";

  string s2 = "PsychoDrill (PTP)";

  string s3 = s1 + s2;

  Console.WriteLine(s3);

  Console.WriteLine();

}

Интересно отметить, что при обработке символа

+
компилятор C# выпускает вызов статического метода
String.Concat()
. В результате конкатенацию строк можно также выполнять, вызывая метод
String.Concat()
напрямую (хотя фактически это не дает никаких преимуществ, а лишь увеличивает объем набираемого кода):

static void StringConcatenation()

{

  Console.WriteLine("=> String concatenation:");

  string s1 = "Programming the ";

  string s2 = "PsychoDrill (PTP)";

  string s3 = String.Concat(s1, s2);

  Console.WriteLine(s3);

  Console.WriteLine();

}

Использование управляющих последовательностей

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

Язык программирования C#9 и платформа .NET5 - _031.png

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

\t
. Или предположим, что нужно создать один строковый литерал с символами кавычек внутри, второй — с определением пути к каталогу и третий — со вставкой трех пустых строк после вывода символьных данных. Для этого можно применять управляющие последовательности
\"
,
\\
и
\n
. Кроме того, ниже приведен еще один пример, в котором для привлечения внимания каждый строковый литерал сопровождается звуковым сигналом:

static void EscapeChars()

{

  Console.WriteLine("=> Escape characters:\a");

  string strWithTabs = "Model\tColor\tSpeed\tPet Name\a ";

  Console.WriteLine(strWithTabs);

  Console.WriteLine("Everyone loves \"Hello World\"\a ");

  Console.WriteLine("C:\\MyApp\\bin\\Debug\a ");

  // Добавить четыре пустых строки и снова выдать звуковой сигнал.

  Console.WriteLine("All finished.\n\n\n\a ");

  Console.WriteLine();

}

Выполнение интерполяции строк

Синтаксис с фигурными скобками, продемонстрированный ранее в главе

({0}, {1}
и т.д.), существовал в рамках платформы .NET еще со времен версии 1.0. Начиная с выхода версии C# 6, при построении строковых литералов, содержащих заполнители для переменных, программисты на C# могут использовать альтернативный синтаксис. Формально он называется интерполяцией строк. Несмотря на то что выходные данные операции идентичны выходным данным, получаемым с помощью традиционного синтаксиса форматирования строк, новый подход позволяет напрямую внедрять сами переменные, а не помещать их в список с разделителями-запятыми.

Взгляните на показанный ниже дополнительный метод в нашем классе

Program(StringInterpolation()
), который строит переменную типа
string
с применением обоих подходов:

static void StringInterpolation()

{

    Console.WriteLine("=> String interpolation:\a");

    // Некоторые локальные переменные будут включены в крупную строку.

    int age = 4;