Например, чтобы вывести строку, которая содержит символ табуляции после каждого слова, можно задействовать управляющую последовательность \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;
string name = "Soren";
// Использование синтаксиса с фигурными скобками.
string greeting = string.Format("Hello {0} you are {1} years old.",
name, age);
Console.WriteLine(greeting);
// Использование интерполяции строк.
string greeting2 = $"Hello {name} you are {age} years old.";
Console.WriteLine(greeting2);
}
В переменной greeting2 легко заметить, что конструируемая строка начинается с префикса $. Кроме того, фигурные скобки по-прежнему используются для пометки заполнителя под переменную; тем не менее, вместо применения числовой метки имеется возможность указывать непосредственно переменную. Предполагаемое преимущество заключается в том, что новый синтаксис несколько легче читать в линейной манере (слева направо) с учетом того, что не требуется "перескакивать в конец" для просмотра списка значений, подлежащих вставке во время выполнения.
С новым синтаксисом связан еще один интересный аспект: фигурные скобки, используемые в интерполяции строк, обозначают допустимую область видимости. Таким образом, с переменными можно применять операцию точки, чтобы изменять их состояние. Рассмотрим модификацию кода присваивания переменных greeting и greeting2:
string greeting = string.Format("Hello {0} you are {1} years old.",
name.ToUpper(), age);
string greeting2 = $"Hello {name.ToUpper()} you are {age} years old.";
Здесь посредством вызова ToUpper() производится преобразование значения name в верхний регистр. Обратите внимание, что при подходе с интерполяцией строк завершающая пара круглых скобок к вызову данного метода не добавляется. Учитывая это, использовать область видимости, определяемую фигурными скобками, как полноценную область видимости метода, которая содержит многочисленные строки исполняемого кода, невозможно. Взамен допускается только вызывать одиночный метод на объекте с применением операции точки, а также определять простое общее выражение наподобие {age += 1}.