Создание форматированных строк с помощью интерполяции
В этом руководстве описывается, как с помощью интерполяции строк вставить значения в одну строку. Вы также узнаете, как управлять форматированием текста результирующей строки. Вы напишете и выполните код C# в браузере и сразу же сможете просмотреть результаты.
Создание интерполированной строки
Запустите приведенный ниже код в интерактивном окне. Нажмите кнопку Перейти в режим фокусировки. Затем введите следующий блок кода в интерактивном окне (замените <name>
своим именем) и нажмите кнопку Выполнить:
var name = "<name>";
Console.WriteLine($"Hello, {name}. It's a pleasure to meet you!");
При запуске кода в окне Вывод отображается строка, которая содержит ваше имя в приветствии. Строковым аргументом в вызове метода WriteLine является выражение интерполированной строки. Это похоже на шаблон, позволяющий создать одну строку (называемую результирующей строкой) из строки, содержащей внедренный код. Выражения интерполированной строки особенно удобны при вставке значений в строку или сцеплении (объединении) нескольких строк.
Приведенный выше пример содержит два элемента, обязательные для каждого выражения интерполированной строки:
Строковый литерал, который начинается с символа
$
, стоящего до открывающей кавычки. Между символом$
и знаком кавычки не должно быть пробелов. (Если вы хотите увидеть, что произойдет, если вы включаете его, вставьте пробел после символа$
в интерактивном окне и запустите обновленный код. Компилятор C# жалуется на непредвиденное символ "$".)Одно или несколько интерполированных выражений. Интерполированное выражение обозначено открывающей и закрывающей фигурной скобкой (
{
и}
). Вы можете указать внутри фигурных скобок любое выражение C#, возвращающее значение (включаяnull
).
Давайте рассмотрим еще несколько примеров интерполяции строк с другими типами данных.
Включение разных типов данных
В предыдущем шаге вы использовали интерполяцию строк для вставки одной строки внутрь другой. При этом интерполированное выражение, включенное в выражение интерполированной строки, может относиться к любому типу данных. Давайте включим в интерполированную строку значения разных типов данных.
В следующем примере мы сначала определяем кортеж с членами Name
, Price
и perPackage
. Запустите приведенный ниже код в интерактивном окне.
var item = (Name: "eggplant", Price: 1.99m, perPackage: 3);
var date = DateTime.Now;
Console.WriteLine($"On {date}, the price of {item.Name} was {item.Price} per {item.perPackage} items.");
Обратите внимание на то, что интерполированное выражение item.Price
в интерполированной строке разрешается в текст 1.99 в результирующей строке. Связано это с тем, что если результат выражения не имеет строковый тип, он разрешается в строку описанным ниже образом.
Если результатом вычисления интерполированного выражения является
null
, используется пустая строка ("" или String.Empty).Если результатом вычисления интерполированного выражения не является
null
, обычно вызывается методToString
результирующего выражения.
В выходных данных этого примера дата является слишком точной (цена на баклажаны не меняется каждую секунду), а в значении цены не указана единица валюты. В следующем шаге вы узнаете, как устранить эти проблемы, управляя форматом строковых представлений результатов выражений.
Управление форматированием интерполированных выражений
В предыдущем шаге мы вставили две неправильно отформатированные строки в результирующую строку. Первая была значением даты и времени, при этом допустимой была только дата. Вторая была ценой, в которой отсутствовала единица валюты. Обе эти проблемы легко решить. Интерполяция строк позволяет указывать строки формата, управляющие форматированием определенных типов. Измените вызов Console.WriteLine
из предыдущего примера, включив в него строки формата для выражений даты и цены, как показано в следующей строке:
Console.WriteLine($"On {date:d}, the price of {item.Name} was {item.Price:C2} per {item.perPackage} items");
Задайте строку формата, указав ее после интерполированного выражения через двоеточие. "d" — это стандартная строка формата для даты и времени, представляющая краткий формат. "C2" — это стандартная строка числового формата, представляющая число в виде денежной единицы с точностью два знака после запятой.
Некоторые типы в библиотеках .NET поддерживают предопределенный набор строк формата. К ним относятся все числовые типы, а также типы даты и времени. Полный список типов, поддерживающих строки формата, см. в разделе Строки формата и типы библиотек классов .NET статьи Типы форматирования в .NET.
Попробуйте изменить строки формата в примере, чтобы узнать, как они влияют на форматирование даты и времени, а также числового значения. Измените "d" в {date:d}
на "t" (чтобы отобразить краткий формат времени), "y" (чтобы отобразить год и месяц) и "yyyy" (чтобы отобразить год в виде четырехзначного числа). Измените "C2" в {price:C2}
на "e" (для экспоненциального представления) и "F3" (чтобы получить числовое значение с тремя знаками после запятой).
Кроме форматирования, вы можете управлять шириной поля и выравниванием для форматированных строк, включаемых в результирующую строку. В следующем шаге вы научитесь это делать.
Управление шириной поля и выравниванием для интерполированных выражений
Как правило, когда результат интерполированной строки форматируется как строка, она включается в результирующую строку без начальных или конечных пробелов. Особенно когда вы работаете с набором данных, возможность управления шириной поля и выравниванием помогает получить более понятные выходные данные. Это можно продемонстрировать на приведенном ниже примере кода.
var inventory = new Dictionary<string, int>()
{
["hammer, ball pein"] = 18,
["hammer, cross pein"] = 5,
["screwdriver, Phillips #2"] = 14
};
Console.WriteLine($"Inventory on {DateTime.Now:d}");
Console.WriteLine(" ");
Console.WriteLine($"|{"Item",-25}|{"Quantity",10}|");
foreach (var item in inventory)
Console.WriteLine($"|{item.Key,-25}|{item.Value,10}|");
Имена элементов выровнены по левому краю, а их количества — по правому. Вы можете указать выравнивание, добавив запятую (,) после интерполированного выражения и назначив минимальную ширину поля. Если указанное значение является положительным числом, то поле выравнивается по правому краю. Если оно является отрицательным числом, то поле выравнивается по левому краю.
Попробуйте удалить знаки "минус" из кода {"Item",-25}
и {item.Key,-25}
, а затем снова выполните пример. На этот раз имена элементов выровнены по правому краю.
Вы можете совмещать описатель выравнивания и строку формата в одном интерполированном выражении. Для этого сначала укажите выравнивание, а затем через двоеточие строку формата. Попробуйте выполнить приведенный ниже код, который выводит три отформатированные строки с заданной шириной поля.
Console.WriteLine($"[{DateTime.Now,-20:d}] Hour [{DateTime.Now,-10:HH}] [{1063.342,15:N2}] feet");
Поздравляем!
Вы завершили работу с интерактивным руководством по интерполяции строк. Вы можете скачать пакет SDK для .NET Core на сайте .NET, создать проект на своем компьютере и продолжать писать код.
Дополнительные сведения см. в разделе Интерполяция строк.
Возникла проблема с этим разделом? Если это так, отправьте нам отзыв, чтобы мы исправили этот раздел.