Ce face Interpolarea șirurilor ($"...")
Interpolarea șirurilor (prefixul $ înaintea ghilimelelor) înlocuiește apelurile greoaie la string.Format("Salut {0}, sold: {1:F2}", nume, sold) cu o sintaxă clară și verificată la compilare: $"Salut {nume}, sold: {sold:F2}". În C# 10+, dacă toate expresiile interpolate sunt constante de tip string, întregul șir interpolat poate fi declarat const, iar compilatorul folosește intern DefaultInterpolatedStringHandler pentru a minimiza alocările de memorie pe heap.
Fiecare expresie dintre acolade suportă opțional o lățime de aliniere (pozitivă pentru aliniere la dreapta, negativă pentru aliniere la stânga) și un specificator de formatare după două puncte (:F2 pentru două zecimale, :N0 pentru separator de mii, :yyyy-MM-dd pentru date calendaristice). Începând cu C# 11, poți combina interpolarea cu raw string literals ($"""...""") pentru a scrie șabloane JSON, SQL sau HTML pe mai multe linii fără a dubla ghilimelele.
Parametri, metode și opțiuni
| Parametru / Metodă | Descriere |
|---|---|
$"... {expr} ..." |
Evaluează expresia C# expr și inserează rezultatul în șirul final. |
{expr:F2} / {expr:N2} |
Formatează un număr cu exact 2 zecimale (F2) sau cu 2 zecimale și separator de mii (N2). |
{expr:P1} / {expr:X4} |
Formatează valoarea ca procentaj cu o zecimală (0.156 devine 15.6%) sau în hexazecimal pe 4 cifre. |
{expr,10} / {expr,-10} |
Aliniază textul pe o coloană de minimum 10 caractere: la dreapta (pozitiv) sau la stânga (negativ). |
{data:yyyy-MM-dd HH:mm} |
Formatează un obiect DateTime sau DateOnly după masca specificată. |
$@"..." / $"""...""" |
Combină interpolarea cu șiruri verbatim (pentru căi de fișiere) sau raw multi-line (C# 11+). |
Exemple
Exemplul 1: Formatarea numerelor, procentelor și tabelarea în consolă
Folosim alinierea pe coloane (,-15 și ,10) împreună cu specificatorul numeric :F2 pentru a afișa o factură aliniată impecabil.
using System.Globalization;
CultureInfo.CurrentCulture = CultureInfo.InvariantCulture;
var produse = new (string Denumire, int Buc, decimal PretUnitar)[]
{
("SSD NVMe 1TB", 2, 349.90m),
("Memorie RAM 32GB", 1, 520.00m),
("Cablu HDMI 2.1", 3, 45.50m)
};
Console.WriteLine($"{"Produs",-18} {"Cant.",5} {"Total (RON)",14}");
Console.WriteLine(new string('-', 39));
foreach (var p in produse)
{
Console.WriteLine($"{p.Denumire,-18} {p.Buc,5} {p.Buc * p.PretUnitar,14:F2}");
}
Ieșire în consolă
Produs Cant. Total (RON)
---------------------------------------
SSD NVMe 1TB 2 699.80
Memorie RAM 32GB 1 520.00
Cablu HDMI 2.1 3 136.50
Exemplul 2: Raw string literals interpolate ($$”””…”””) pentru JSON în C# 11+
Când șirul conține deja acolade (cum este cazul unui obiect JSON), prefixarea cu două semne dolar ($$""") indică faptul că expresiile C# se scriu în acolade duble {{expresie}}, iar acoladele simple rămân literale în JSON.
int idUtilizator = 1042;
string rol = "admin";
bool activ = true;
string payloadJson = $$"""
{
"userId": {{idUtilizator}},
"role": "{{rol}}",
"isActive": {{activ.ToString().ToLowerInvariant()}}
}
""";
Console.WriteLine(payloadJson);
Ieșire în consolă
{
"userId": 1042,
"role": "admin",
"isActive": true
}
Greșeli frecvente
- Folosirea operatorului ternar
? :în interiorul unei acolade de interpolare fără paranteze: în$"{scor >= 50 ? "Admis" : "Respins"}", compilatorul confundă caracterul:cu un specificator de formatare. Scrie întotdeauna cu paranteze:$"{(scor >= 50 ? "Admis" : "Respins")}". - Uitarea dublării acoladelor (
{{și}}) atunci când vrei să afișezi o acoladă literală într-un șir interpolat obișnuit$"...". - Construirea interogărilor SQL prin interpolare directă de șiruri (
$"SELECT * FROM Users WHERE Name = '{nume}'"), ceea ce deschide vulnerabilități critice de SQL Injection; folosește întotdeauna parametri SQL sau metodele parametrizate din Dapper / EF Core.
Funcții și concepte înrudite
Console.WriteLine / ReadLine: Afișează text în fluxul standard de ieșire și citește linii de text introduse de utilizator în consolă.StringBuilder: Construiește și modifică eficient șiruri de caractere într-un buffer mutabil, fără a aloca obiecte intermediare în bucle.Replace, Trim și Substring: Curăță spațiile de la capete, înlocuiește fragmente de text și extrage sub-șiruri prin Substring sau operatorul de interval (..).