Interpolarea șirurilor de caractere este un alt cuvânt mare pentru impresionarea membrilor familiei, cu o explicație foarte simplă. Cunoscut și sub denumirea de substituire de variabile, extindere de variabile sau interpolare de variabile, este pur și simplu procesul prin care putem înlocui anumiți substituenți în literalele de tip șir de caractere cu valori reale din variabile și expresii. Dacă tot nu știți despre ce vorbesc, amintiți-vă cum introduceam valori de variabile în șirurile pe care le imprimam la consolă, în lecțiile anterioare::
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
using
System;
namespace
BunaLume
{
class
Program
{
static void Main(string[] args)
{
int varsta = 25;
int inaltime = 158;
Console.WriteLine("Varsta mea este " + varsta + " iar inaltimea mea este " + inaltime);
Console.ReadLine();
}
}
}
|
Acest lucru funcționează bine, dar poate deveni obositor și confuz să gestionați toate acele ghilimele. Din acest motiv, C# specifică modalități prin care le putem evita. Prima, pe care am folosit-o deja în câteva din exemple anterioare, se numește șir de caracter în format compozit (composite format string), și arată astfel:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
using
System;
namespace
BunaLume
{
class
Program
{
static void Main(string[] args)
{
int varsta = 25;
int inaltime = 158;
Console.WriteLine("Varsta mea este {0} iar inaltimea mea este {1}", varsta, inaltime);
Console.ReadLine();
}
}
}
|
Valorile substituente specificate între paranteze vor fi înlocuite cu valorile variabilelor care urmează după text și sunt numerotate începând de la 0, într-o ordine consecutivă și crescătoare. Pentru fiecare parametru substituit în string, o valoare corespunzătoare literală sau o variabilă trebuie furnizată după șirul de caractere. Această abordare pare mai bună decât cea inițială, ne scapă de nenumăratele ghilimele, dar tot poate crea confuzie dacă numărul de substituenți nu se potrivește cu numărul de parametri de după șir, sau dacă ordinea lor nu se potrivește. Acest lucru este rezolvat cu ajutorul interpolării șirurilor, care arată astfel:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
using
System;
namespace
BunaLume
{
class
Program
{
static void Main(string[] args)
{
int varsta = 25;
int inaltime = 158;
Console.WriteLine($"Varsta mea este {varsta} iar inaltimea mea este {inaltime}");
Console.ReadLine();
}
}
}
|
Observați caracterul $ în fața textului, acesta este caracterul care permite interpolarea să aibă loc în primul rând. De asemenea, amintiți-vă că, pentru ca interpolarea să funcționeze, șirurile trebuie să fie disponibile în momentul compilării ca șir literal. Și, deoarece interpolarea se realizează cu acolade, dacă textul dvs. conține o acoladă, trebuie să folosiți o secvență escape, sau veți primi o eroare. Secvența escape se face prin două acolade succesive, nu prin caracterul backslash:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
|
using
System;
namespace
BunaLume
{
class
Program
{
static void Main(string[] args)
{
Console.WriteLine($"Aceasta este interpolare ce include caractere }}");
Console.ReadLine();
}
}
}
|
În acest caz, doar o singură acoladă va fi imprimată pe consolă.
Vorbind despre secvențele escape, C# ne permite și să ignorăm orice parte din șir care ar fi în mod normal interpretată ca o secvență escape, prin plasarea unui caracter @ în fața șirului de caractere literal, astfel:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
|
using
System;
namespace
BunaLume
{
class
Program
{
static void Main(string[] args)
{
Console.WriteLine(@"C:\Program Files\");
Console.ReadLine();
}
}
}
|
În acest caz, nu trebuie să mai facem escape la șirul literal astfel: C:\\Program Files\\, așa cum am face în mod normal. Există o excepție de la aceasta, aveți nevoie de o secvență escape pentru ghilimele duble, iar acest lucru se realizează prin plasarea a două ghilimele duble în ordine succesivă: @"""". Fiți conștienți de faptul că șirul are încă ghilimelele de început și de sfârșit, deci, prin folosirea secvenței escape, este afișată de fapt o singură ghilimea.