Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этом руководстве вы создадите небольшое файловое приложение , которое печатает отформатированную сводку заказа. Попутно вы применяете интерполяцию строк, чтобы вставлять значения в текст, форматировать числа и денежные суммы, выравнивать столбцы и получать вывод с учетом языка и региональных параметров.
В этом руководстве предполагается, что вы знакомы с основными понятиями C#. Справочник по функциям синтаксиса интерполяции см. в разделе "Интерполяция строк".
Необходимые условия
- Пакет SDK .NET 10 или более поздняя версия. Для приложений на основе файлов требуется .NET 10 или более поздней версии.
- Редактор кода, например Visual Studio Code.
Создание приложения
Приложение на основе файлов — это один .cs файл, который выполняется без файла проекта. Создайте папку для приложения и перейдите в нее:
mkdir StringInterpolation
cd StringInterpolation
Создайте пустой файл с именем report.cs в этой папке и откройте его в редакторе. Вы добавляете в него код в следующих разделах, а приложение запускаете с помощью dotnet run report.cs.
Вставка значений в текст
Добавьте $ перед строковым литералом, чтобы сделать его интерполируемой строкой. В строке поместите любое выражение C# в фигурные скобки ({ и }); C# вычисляет выражение, преобразует результат в строку и вставляет его.
Добавьте следующий код в report.cs, а затем запустите приложение с помощью dotnet run report.cs:
string name = "Maria";
int itemCount = 3;
// Prefix a string literal with $ to interpolate expressions inside braces.
Console.WriteLine($"Hello, {name}! You have {itemCount} items in your cart.");
// => Hello, Maria! You have 3 items in your cart.
Результат объединяет литеральный текст со значениями name и itemCount.
Форматирование чисел и валют
Сводка заказа показывает деньги и ставки, поэтому необработанные числа, как 23.5 или 0.08 выглядят незавершенными и трудными для чтения. Представить каждое значение таким образом, как клиент ожидает: цена с символом валюты и налоговой ставкой в процентах. Отформатируйте его как часть интерполяции.
Чтобы отформатировать значение, следуйте выражению с двоеточием (:) и строкой формата. Стандартные строки форматирования C и P0 создают денежные и целые проценты. Добавьте следующий код в конец файла:
decimal subtotal = 23.5m;
decimal taxRate = 0.08m;
// Follow an expression with :format to apply a standard or custom format string.
Console.WriteLine($"Subtotal: {subtotal:C}");
Console.WriteLine($"Tax rate: {taxRate:P0}");
Console.WriteLine($"Total: {subtotal * (1 + taxRate):C}");
// => Subtotal: $23.50
// => Tax rate: 8%
// => Total: $25.38
Строка формата учитывает параметры текущей культуры, поэтому символ валюты и разделители соответствуют настройкам компьютера.
Выровнять значения по столбцам
Когда вы печатаете несколько строк данных, значения разной длины делают столбцы неровными, и их становится трудно просматривать. Чтобы выстраивать каждое имя и число под согласованным заголовком, присвойте каждому полю фиксированную ширину, чтобы столбцы оставались прямыми независимо от того, насколько долго каждое значение.
Чтобы задать минимальную ширину поля, следуйте выражению с запятыми (,) и шириной. Положительная ширина выравнивает значение по правому краю; отрицательная ширина — по левому краю. Объединяет ширину и строку формата в виде {expression,width:format}. Добавьте следующий код для печати табличной сводки:
(string Name, int Quantity, decimal Price)[] orders =
[
("Espresso", 2, 3.50m),
("Cappuccino", 1, 4.25m),
("Tea", 4, 2.00m),
];
// Follow an expression with ,width to set a minimum field width.
// A positive width right-aligns; a negative width left-aligns.
foreach (var order in orders)
{
Console.WriteLine($"{order.Name,-12}{order.Quantity,3}{order.Price * order.Quantity,10:C}");
}
// => Espresso 2 $7.00
// => Cappuccino 1 $4.25
// => Tea 4 $8.00
Выровненный по левому краю столбец с именами и выровненные по правому краю числовые столбцы образуют удобочитаемую таблицу.
Формирование вывода с учетом языковых и региональных параметров
Интерполированная строка по умолчанию использует текущие региональные параметры. Когда вам нужна определенная культура, например фиксированный формат для журналов или языковой стандарт для квитанции, передайте культуру в String.Create(IFormatProvider, DefaultInterpolatedStringHandler). Добавьте следующий код:
decimal total = 1234.56m;
// An interpolated string uses the current culture by default.
// Use string.Create with a culture to control the formatting explicitly.
string germanReceipt = string.Create(
new CultureInfo("de-DE"), $"Gesamt: {total:C}");
string invariantLog = string.Create(
CultureInfo.InvariantCulture, $"total={total:F2}");
Console.WriteLine(germanReceipt);
Console.WriteLine(invariantLog);
// => Gesamt: 1.234,56 €
// => total=1234.56
Немецкая квитанция использует запятую в качестве десятичного разделителя и символа евро. В инвариантном журнале используется точка и не используется никакой символ, независимо от языка и региональных параметров компьютера.
Дальнейшие действия
Вы использовали интерполяцию строк для вставки, форматирования, выравнивания и локализации значений. Полный набор функций интерполяции, включая необработанные строковые литералы, экранированные фигурные скобки и интерполированные строки констант, см. в статье о концепции: