1. Вспоминаем интерполяцию строк
Довольно часто нам нужно не просто вывести строку, а вставить в неё значения переменных. Раньше для этого использовали либо конкатенацию (+), либо метод string.Format. Но с тех пор как в C# появилась магия — строковая интерполяция (string interpolation), — жить стало гораздо лучше.
Как работает интерполяция строк
Добавьте перед строкой символ $, а внутри строки используйте фигурные скобки {} для вставки переменных или даже целых выражений.
Сравнение старого и нового стиля вывода с переменными
string name = "Анна";
int age = 24;
Console.WriteLine("Меня зовут " + name + ", мне " + age + " года."); // Старый стиль
Console.WriteLine($"Меня зовут {name}, мне {age} года."); // Новый стиль!
Можно вставлять прямо вычисления и выражения:
int a = 5, b = 10;
Console.WriteLine($"Сумма {a} + {b} = {a + b}");
2. Как работает интерполяция строк
Перед строкой ставим $, а переменные или выражения обрамляем фигурными скобками {}:
string name = "Анна";
int age = 24;
Console.WriteLine($"Меня зовут {name}, мне {age} года.");
- Всё, что находится вне скобок — просто текст.
- Всё, что внутри скобок интерпретируется как C#-код: это может быть имя переменной, арифметика, вызов метода и т.д.
Вычисления и выражения прямо в строке
Интерполяция не ограничивается простыми переменными! Вот что можно делать:
Арифметические выраженияint apples = 7;
int pears = 5;
Console.WriteLine($"У меня всего {apples + pears} фруктов."); // 12
Операции со строками и методами
string city = "Будапешт";
Console.WriteLine($"Город в верхнем регистре: {city.ToUpper()}"); // БУДАПЕШТ
Тернарные операторы, условия
int score = 90;
Console.WriteLine($"Оценка: {(score >= 60 ? "зачёт" : "незачёт")}");
Вызовы методов
string FormatUser(string name, int age) => $"{name} ({age})";
Console.WriteLine($"Пользователь: {FormatUser("Ева", 19)}"); // Пользователь: Ева (19)
Работа с массивами и коллекциями
int[] numbers = { 3, 5, 7 };
Console.WriteLine($"Сумма: {numbers.Sum()}");
Console.WriteLine($"Элементы: {string.Join(", ", numbers)}");
Вложенные выражения и сложные конструкции
var user = new { Name = "Олег", Role = "Admin" };
Console.WriteLine($"Имя: {user.Name}, роль: {(user.Role == "Admin" ? "администратор" : "пользователь")}");
выражения внутри скобок должны быть короткими и читаемыми. Если логика сложная — лучше вычислить её заранее и подставить готовую переменную.
var student = new { Name = "Саша", Info = new { Age = 21, Uni = "Harvard" } };
Console.WriteLine($"Имя: {student.Name}, вуз: {student.Info.Uni}");
Преобразования типов на лету
double price = 19.99;
int count = 3;
Console.WriteLine($"Общая стоимость: {price * count} евро");
Дата и время — сразу в нужном виде
DateTime now = DateTime.Now;
Console.WriteLine($"Сегодня: {now.Day}.{now.Month}.{now.Year}");
Пример с циклом
var days = new[] { "Пн", "Вт", "Ср" };
Console.WriteLine($"Дни недели: {string.Join(", ", days)}");
3. Форматирование внутри интерполяции
Часто важно красиво отобразить числа, даты, валюту или проценты.
Интерполяция позволяет прямо внутри скобок указывать формат — после двоеточия.
Общий синтаксис: {выражение:формат}
Форматирование чисел
double num = 1234.5678;
Console.WriteLine($"Округлённое: {num:F2}"); // 1234.57
Console.WriteLine($"В экспоненциальной форме: {num:E1}"); // 1.2E+003
Console.WriteLine($"С разделением разрядов: {num:N}"); // 1 234,57 (зависит от культуры)
Примеры форматов:
- F2 — два знака после запятой
- N0 — разделитель тысяч, 0 знаков после запятой
- E1 — экспоненциальный вид, 1 знак после точки
- P0 — проценты, 0 знаков после точки
double ratio = 0.1234;
Console.WriteLine($"Проценты: {ratio:P1}"); // 12,3 %
Форматирование дат
DateTime d = new DateTime(2025, 6, 18, 15, 42, 0);
Console.WriteLine($"Дата: {d:dd.MM.yyyy}"); // 18.06.2025
Console.WriteLine($"Время: {d:HH:mm}"); // 15:42
Console.WriteLine($"ISO: {d:yyyy-MM-ddTHH:mm:ss}"); // 2025-06-18T15:42:00
Кратко по форматам дат:
- dd — день (2 цифры)
- MM — месяц
- yyyy — год
- HH:mm — часы:минуты (24 часа)
- d — короткая дата по культуре
- D — длинная дата
Форматирование валют и денег
decimal cost = 2999.5m;
Console.WriteLine($"Цена: {cost:C}"); // 2,999.50 $ (в зависимости от культуры)
Выравнивание и заполнение
Можно задать ширину поля, выравнивание по правому или левому краю:
int val = 7;
Console.WriteLine($"[{val,5}]"); // [ 7] — справа
Console.WriteLine($"[{val,-5}]"); // [7 ] — слева
Комбинирование форматов
DateTime dt = DateTime.Now;
Console.WriteLine($"Сегодня {dt:dddd, dd MMMM yyyy}, время {dt:HH:mm}");
Интерполяция с разными типами данных
bool ok = true;
Console.WriteLine($"Операция {(ok ? "успешна" : "ошибка")}");
Многострочные строки с интерполяцией
Так же недавно появились raw string literals и многострочные интерполированные строки:
string user = "Тимур";
int score = 100;
Console.WriteLine($"""
Поздравляем, {user}!
Ваш результат: {score}
""");
Вложенная интерполяция и вычисления
Можно вызывать методы, форматировать их результат и вставлять в строку:
double[] temps = { 23.4, 25.1, 21.9 };
Console.WriteLine($"Средняя температура: {temps.Average():F1}°C");
Пример с таблицей (выравнивание + формат)
Форматирование и выравнивание в таблице с помощью интерполяции
double[] prices = { 123.4, 8.9, 5643.0 };
for (int i = 0; i < prices.Length; i++)
Console.WriteLine($"Товар {i + 1}: {prices[i,10:F2} евро");
Результат:
Товар 1: 123.40 евро
Товар 2: 8.90 евро
Товар 3: 5643.00 евро
4. Экранирование и интерполяция вместе
Можно использовать экранированные символы и интерполяцию одновременно:
string user = "Маша";
Console.WriteLine($"Привет, \"{user}\"!\nПриятно познакомиться.");
Вывод:
Привет, "Маша"!
Приятно познакомиться.
Если объединить это с дословными строками, то просто сперва ставим $, потом @ (хотя можно и наоборот — они равнозначны):
string path = "C:\\Temp";
Console.WriteLine($@"Найден файл по адресу: ""{path}""");
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ