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 — відсотки, без знаків після десяткового роздільника
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 — день (дві цифри)
- 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 ? "успішна" : "помилка")}");
Багаторядкові рядки з інтерполяцією
Також нещодавно зʼявилися сирі рядкові літерали та багаторядкові інтерпольовані рядки:
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}""");
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ