CodeGym /Kursy /C# SELF /Zaawansowana interpolacja stringów

Zaawansowana interpolacja stringów

C# SELF
Poziom 9 , Lekcja 2
Dostępny

1. Przypominamy sobie interpolację stringów

Często potrzebujemy nie tylko wyświetlić stringa, ale też wstawić do niego wartości zmiennych. Kiedyś do tego używało się albo konkatenacji (+), albo metody string.Format. Ale odkąd w C# pojawiła się magia — interpolacja stringów (string interpolation), — życie stało się dużo lepsze.

Jak działa interpolacja stringów

Dodaj przed stringiem znak $, a wewnątrz stringa użyj nawiasów klamrowych {}, żeby wstawić zmienne albo nawet całe wyrażenia.

Porównanie starego i nowego stylu wypisywania ze zmiennymi

string name = "Anna";
int age = 24;

Console.WriteLine("Mam na imię " + name + ", mam " + age + " lata."); // Stary styl
Console.WriteLine($"Mam na imię {name}, mam {age} lata."); // Nowy styl!

Możesz wstawiać bezpośrednio obliczenia i wyrażenia:


int a = 5, b = 10;
Console.WriteLine($"Suma {a} + {b} = {a + b}");

2. Jak działa interpolacja stringów

Przed stringiem stawiamy $, a zmienne lub wyrażenia otaczamy nawiasami klamrowymi {}:


string name = "Anna";
int age = 24;

Console.WriteLine($"Mam na imię {name}, mam {age} lata.");
  • Wszystko, co jest poza nawiasami — to po prostu tekst.
  • Wszystko, co wewnątrz nawiasów jest interpretowane jako kod C#: to może być nazwa zmiennej, arytmetyka, wywołanie metody itd.

Obliczenia i wyrażenia bezpośrednio w stringu

Interpolacja nie ogranicza się do prostych zmiennych! Zobacz, co można zrobić:

Wyrażenia arytmetyczne
int apples = 7;
int pears = 5;
Console.WriteLine($"Mam razem {apples + pears} owoców."); // 12
Operacje na stringach i metodach
string city = "Budapeszt";
Console.WriteLine($"Miasto wielkimi literami: {city.ToUpper()}"); // BUDAPESZT
Operatory trójargumentowe, warunki
int score = 90;
Console.WriteLine($"Ocena: {(score >= 60 ? "zaliczone" : "niezaliczone")}");
Wywołania metod
string FormatUser(string name, int age) => $"{name} ({age})";
Console.WriteLine($"Użytkownik: {FormatUser("Ewa", 19)}"); // Użytkownik: Ewa (19)
Praca z tablicami i kolekcjami
int[] numbers = { 3, 5, 7 };
Console.WriteLine($"Suma: {numbers.Sum()}");
Console.WriteLine($"Elementy: {string.Join(", ", numbers)}");
Zagnieżdżone wyrażenia i złożone konstrukcje
var user = new { Name = "Oleg", Role = "Admin" };
Console.WriteLine($"Imię: {user.Name}, rola: {(user.Role == "Admin" ? "administrator" : "użytkownik")}");
Zwróć uwagę:

wyrażenia w nawiasach powinny być krótkie i czytelne. Jeśli logika jest złożona — lepiej policzyć ją wcześniej i podstawić gotową zmienną.

Wielopoziomowe wyrażenia
var student = new { Name = "Sasza", Info = new { Age = 21, Uni = "Harvard" } };
Console.WriteLine($"Imię: {student.Name}, uczelnia: {student.Info.Uni}");
Konwersje typów na bieżąco
double price = 19.99;
int count = 3;
Console.WriteLine($"Całkowity koszt: {price * count} euro");
Data i czas — od razu w odpowiednim formacie
DateTime now = DateTime.Now;
Console.WriteLine($"Dzisiaj: {now.Day}.{now.Month}.{now.Year}");
Przykład z pętlą
var days = new[] { "Pn", "Wt", "Śr" };
Console.WriteLine($"Dni tygodnia: {string.Join(", ", days)}");

3. Formatowanie wewnątrz interpolacji

Często ważne jest, żeby ładnie wyświetlić liczby, daty, walutę albo procenty.
Interpolacja pozwala bezpośrednio w nawiasach podać format — po dwukropku.

Ogólna składnia: {wyrażenie:format}

Formatowanie liczb

double num = 1234.5678;
Console.WriteLine($"Zaokrąglone: {num:F2}");     // 1234.57
Console.WriteLine($"W notacji wykładniczej: {num:E1}"); // 1.2E+003
Console.WriteLine($"Z separatorem tysięcy: {num:N}"); // 1 234,57 (zależy od kultury)

Przykłady formatów:

  • F2 — dwa miejsca po przecinku
  • N0 — separator tysięcy, 0 miejsc po przecinku
  • E1 — notacja wykładnicza, 1 miejsce po kropce
  • P0 — procenty, 0 miejsc po kropce
double ratio = 0.1234;
Console.WriteLine($"Procenty: {ratio:P1}"); // 12,3 %

Formatowanie dat

DateTime d = new DateTime(2025, 6, 18, 15, 42, 0);
Console.WriteLine($"Data: {d:dd.MM.yyyy}");         // 18.06.2025
Console.WriteLine($"Godzina: {d:HH:mm}");             // 15:42
Console.WriteLine($"ISO: {d:yyyy-MM-ddTHH:mm:ss}"); // 2025-06-18T15:42:00

Krótko o formatach dat:

  • dd — dzień (2 cyfry)
  • MM — miesiąc
  • yyyy — rok
  • HH:mm — godzina:minuty (24h)
  • d — krótka data wg kultury
  • D — długa data

Formatowanie walut i pieniędzy

decimal cost = 2999.5m;
Console.WriteLine($"Cena: {cost:C}"); // 2,999.50 $  (w zależności od kultury)

Wyrównywanie i wypełnianie

Możesz ustawić szerokość pola, wyrównanie do prawej lub lewej:

int val = 7;
Console.WriteLine($"[{val,5}]");  // [    7] — z prawej
Console.WriteLine($"[{val,-5}]"); // [7    ] — z lewej

Kombinowanie formatów

DateTime dt = DateTime.Now;
Console.WriteLine($"Dzisiaj {dt:dddd, dd MMMM yyyy}, godzina {dt:HH:mm}");

Interpolacja z różnymi typami danych

bool ok = true;
Console.WriteLine($"Operacja {(ok ? "udana" : "błąd")}");

Wieloliniowe stringi z interpolacją

Niedawno pojawiły się też raw string literals i wieloliniowe interpolowane stringi:

string user = "Timur";
int score = 100;

Console.WriteLine($"""
    Gratulacje, {user}!
    Twój wynik: {score}
    """);

Zagnieżdżona interpolacja i obliczenia

Możesz wywoływać metody, formatować ich wynik i wstawiać do stringa:

double[] temps = { 23.4, 25.1, 21.9 };
Console.WriteLine($"Średnia temperatura: {temps.Average():F1}°C");

Przykład z tabelą (wyrównanie + format)

Formatowanie i wyrównywanie w tabeli za pomocą interpolacji

double[] prices = { 123.4, 8.9, 5643.0 };
for (int i = 0; i < prices.Length; i++)
    Console.WriteLine($"Produkt {i + 1}: {prices[i],10:F2} euro");

Wynik:

Produkt 1:    123.40 euro
Produkt 2:      8.90 euro
Produkt 3:   5643.00 euro

4. Escape'owanie i interpolacja razem

Możesz używać znaków escape i interpolacji jednocześnie:

string user = "Masha";
Console.WriteLine($"Cześć, \"{user}\"!\nMiło cię poznać.");

Wynik:

Cześć, "Masha"!
Miło cię poznać.

Jeśli połączysz to z dosłownymi stringami, to po prostu najpierw dajesz $, potem @ (albo odwrotnie — to bez różnicy):

string path = "C:\\Temp";
Console.WriteLine($@"Znaleziono plik pod adresem: ""{path}""");
Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION