Stringi w C#

Stringi w C# — Interpolacja, Formatowanie i Verbatim Stringi

Stringi w C# — Interpolacja, Formatowanie i Verbatim Stringi

Praca ze stringami to jedna z tych rzeczy, które w C# robisz praktycznie codziennie.
Wyświetlanie danych użytkownika, budowanie logów, generowanie komunikatów, tworzenie ścieżek do plików czy przygotowywanie maili — wszystko sprowadza się do poprawnego składania tekstu.

Problem zaczyna się wtedy, gdy kod robi się nieczytelny:

  • wszędzie pojawiają się +
  • gubią się cudzysłowy
  • formatowanie liczb jest niespójne
  • daty wyglądają inaczej na różnych komputerach
  • ścieżki do plików zamieniają się w escape-characterowy koszmar

W tym artykule pokażę Ci praktyczne podejście do pracy ze stringami w nowoczesnym C#. Bez akademickiej teorii. Zbudujemy realistyczny przykład aplikacji konsolowej krok po kroku.


Czego nauczysz się w tym poradniku?

✅ czym jest interpolacja stringów w C#
✅ jak formatować liczby i daty
✅ kiedy używać verbatim stringów (@)
✅ jak połączyć $ i @
✅ dlaczego konkatenacja + szybko staje się problemem
✅ jak pisać czytelny, production-ready kod


Dlaczego interpolacja stringów jest dziś standardem?

Jeszcze kilka lat temu bardzo często można było zobaczyć taki kod:

Console.WriteLine("Klient: " + customerName);

Technicznie działa poprawnie.

Problem pojawia się wtedy, gdy:

  • tekst staje się dłuższy
  • pojawia się więcej zmiennych
  • dochodzi formatowanie
  • budujesz wielolinijkowe komunikaty

Kod bardzo szybko robi się trudny do czytania i podatny na błędy.

Nowoczesny C# rozwiązuje ten problem przez interpolację stringów.


Interpolacja stringów
Interpolacja stringów

Interpolacja stringów w C# — podstawy

Interpolacja pozwala osadzać zmienne bezpośrednio wewnątrz stringa.

Wystarczy użyć znaku $.

Przykład

string customerName = "Anna Kowalska";
Console.WriteLine($"Klient: {customerName}");

To podejście ma ogromną przewagę:

  • kod czyta się jak normalne zdanie
  • od razu widzisz, gdzie trafia zmienna
  • łatwiej debugować
  • trudniej popełnić błąd

Realny przykład — potwierdzenie zamówienia

Załóżmy, że budujesz aplikację sklepu internetowego.

Program ma wygenerować potwierdzenie zamówienia.

Dane wejściowe

string customerName = "Anna Kowalska";
string orderNumber = "ORD-2025-00847";
string productName = "Klawiatura mechaniczna";
double unitPrice = 349.99;
int quantity = 2;
double totalValue = unitPrice * quantity;
DateTime orderDate = new DateTime(2025, 6, 15, 14, 30, 0);

Pierwsze podejście — konkatenacja

  Console.WriteLine("Klient: " + customerName);
  Console.WriteLine("Zamówienie: " + orderNumber);
  Console.WriteLine("Produkt: " + productName);
  Console.WriteLine("Cena jednostkowa: " + unitPrice + " zł");
  Console.WriteLine("Ilość: " + quantity + " szt.");

Działa.

Ale już tutaj widać problem:

  • dużo +
  • dużo cudzysłowów
  • słaba czytelność

Przy większych komunikatach taki kod szybko zamienia się w chaos.


Lepsze rozwiązanie — interpolacja stringów

Console.WriteLine($"Klient: {customerName}");
Console.WriteLine($"Zamówienie: {orderNumber}");
Console.WriteLine($"Produkt: {productName}");
Console.WriteLine($"Cena jednostkowa: {unitPrice} zł");
Console.WriteLine($"Ilość: {quantity} szt.");

Różnica wydaje się niewielka.

Ale przy większych projektach czytelność rośnie ogromnie.


Formatowanie liczb i dat
Formatowanie liczb i dat

Formatowanie liczb w C#

Samo wyświetlanie zmiennych to za mało.

W prawdziwych aplikacjach potrzebujesz kontroli nad formatem danych.

Najczęstszy problem?

Liczby zmiennoprzecinkowe.


Problem z double

Console.WriteLine(unitPrice);

W zależności od ustawień systemu możesz dostać:

349,99

albo:

349.99

Dodatkowo liczba miejsc po przecinku może być różna.


Formatowanie za pomocą :F2

Console.WriteLine($"Cena: {unitPrice:F2} zł");

F2 oznacza:

  • liczba zmiennoprzecinkowa
  • dokładnie 2 miejsca po przecinku

Efekt:

Cena: 349.99 zł

Formatowanie dat w C#

Daty również wymagają kontroli.

Przykład

Console.WriteLine($"{orderDate:dd.MM.yyyy HH:mm}");

Efekt:

15.06.2025 14:30

To znacznie lepsze niż domyślny format systemowy.


Production-ready code
Production-ready code

Production-ready podejście — obliczenia poza stringiem

To bardzo ważny nawyk.

❌ Złe podejście:

Console.WriteLine($"{unitPrice * quantity:F2}");

✅ Lepsze:

double totalValue = unitPrice * quantity;
Console.WriteLine($"{totalValue:F2}");

Dlaczego?

Bo:

  • wartość ma sensowną nazwę
  • łatwiej debugować
  • można użyć jej ponownie
  • kod jest czytelniejszy

Verbatim stringi
Verbatim stringi

Verbatim Stringi w C#

Kolejny częsty problem w C# to ścieżki do plików.

Bez verbatim stringa

string path = "C:\\Sklep\\Potwierdzenia";

Kod działa.

Ale wygląda fatalnie.


Verbatim String (@)

string path = @"C:\Sklep\Potwierdzenia";

Znacznie czytelniej. @ mówi kompilatorowi: traktuj backslashe dosłownie


Połączenie $ i @

To jedna z najbardziej praktycznych rzeczy w codziennym C#.

Przykład

string saveFolder = @"C:\Sklep\Potwierdzenia";
string confirmationFile = $@"{saveFolder}\ORD-2025-00847.txt";

Dostajesz:

  • interpolację
  • czytelne ścieżki
  • brak podwójnych backslashy

To bardzo często używany pattern w aplikacjach backendowych.


Budowanie wielolinijkowego potwierdzenia

W realnych projektach bardzo często generujesz:

  • maile
  • logi
  • raporty
  • paragony
  • potwierdzenia

Zobacz production-ready podejście.


Budowanie całego komunikatu jako jednego stringa

string separator = new string('=', 54);

string confirmation =
    $"{separator}\n" +
    $"   POTWIERDZENIE ZAMÓWIENIA\n" +
    $"{separator}\n" +
    $"Klient:              {customerName}\n" +
    $"Numer zamówienia:    {orderNumber}\n" +
    $"Produkt:             {productName}\n" +
    $"Cena jednostkowa:    {unitPrice:F2} zł\n" +
    $"Ilość:               {quantity} szt.\n" +
    $"Wartość całkowita:   {totalValue:F2} zł\n" +
    $"Data zamówienia:     {orderDate:dd.MM.yyyy HH:mm}\n" +
    $"{separator}";

Console.WriteLine(confirmation);

Dlaczego to podejście jest lepsze?

Masz:

✅ jeden centralny string
✅ możliwość zapisania do pliku
✅ możliwość wysłania mailem
✅ łatwiejsze testowanie
✅ lepszą czytelność

To podejście bardzo często spotkasz w produkcyjnym kodzie.


string.Format() — czy nadal ma sens?

Tak. Ale głównie w starszym kodzie albo specyficznych scenariuszach.

Przykład

string.Format("Klient: {0}, Produkt: {1}", customerName, productName);

Problem?

Przy większej liczbie parametrów łatwo się pomylić.


Kiedy string.Format() nadal ma sens?

Gdy szablon pochodzi z zewnątrz:

  • baza danych
  • plik konfiguracyjny
  • CMS
  • tłumaczenia

Interpolacja działa podczas kompilacji.

string.Format() działa dynamicznie w runtime. To ważna różnica architektoniczna.


Czego unikać
Czego unikać

Najczęstsze błędy przy pracy ze stringami

❌ Nadużywanie +

Kod szybko staje się nieczytelny.


❌ Logika wewnątrz interpolacji

$"{price * quantity * discount}"

Lepiej wyciągnąć obliczenia wcześniej.


❌ Brak formatowania dat i liczb

Nigdy nie zakładaj domyślnego formatu systemowego.


❌ Ręczne wpisywanie separatorów

Zamiast:

"=========================="

lepiej:

new string('=', 30)

Checklist — dobre praktyki pracy ze stringami w C#

Używaj interpolacji ($"")

✅ większa czytelność
✅ mniej błędów
✅ łatwiejszy maintenance

Formatuj liczby i daty

:F2
dd.MM.yyyy

Używaj verbatim stringów (@)

✅ czytelne ścieżki
✅ brak escape-chaosu

Wyciągaj obliczenia poza stringi

✅ lepszy debugging
✅ lepsza architektura


Podsumowanie

Interpolacja stringów to dziś standard w nowoczesnym C#.

W połączeniu z:

  • formatowaniem
  • verbatim stringami
  • dobrym podziałem odpowiedzialności

pozwala pisać kod, który jest:

✅ czytelny
✅ łatwy w utrzymaniu
✅ mniej podatny na błędy
✅ bardziej production-ready

To drobny temat, ale ogromnie wpływa na jakość codziennego kodu.


Zobacz także — powiązane artykuły

👉 MCP w .NET (C#) – jak zbudować serwer AI krok po kroku

👉 Tworzenie klas i obiektów w C# — kompletny przewodnik

👉 Pattern Matching w C# – switch expressions i type patterns


CTA

📌 Jakiego podejścia do stringów używasz najczęściej?
Zostaw komentarz pod artykułem.

📌 Chcesz więcej praktycznego C# i .NET?

👉subskrybuj nasz kanał na YT!

👉 sprawdź moje kursy .NET i C#.

Dołącz do “Od Zera do .NET Developera”

Zacznij swoją przygodę z programowaniem w oparciu o sprawdzone praktyki rynkowe. Wybierz kompletną ścieżkę rozwoju i zbuduj solidne fundamenty.

Dołącz do ścieżki teraz →
Masz pytania? Napisz: mariuszjurczenko@dev-hobby.pl

Dodaj komentarz