JavaRush /Курси /C# SELF /Поглиблена інтерполяція рядків

Поглиблена інтерполяція рядків

C# SELF
Рівень 9 , Лекція 2
Відкрита

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}""");
Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ