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 arytmetyczneint 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")}");
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ą.
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}""");
GO TO FULL VERSION