Conversia în tipul String poate fi realizată în mai multe moduri, primul dintre ele fiind conversia implicită. Ori de câte ori veți concatena un string și un alt tip de dată, altul decât string, runtime-ul .NET va converti al doilea tip în string, în fundal, fără cunoștința voastră. Acest lucru este conversia de tip implicită.
Următoarea metodă de conversie în tipul string este prin apelarea metodei ToString() asupra variabilei sau valorii (am utilizat-o de câteva ori până acum). Această metodă poate fi utilizată pentru toate tipurile de date în .NET Framework. Puteți apela chiar 7.ToString(), și ar fi valabil, producând șirul „7”.
Următorul exemplu demonstrează utilizarea ambelor moduri de conversie în tipul string:
1 2 3 4 5 6 7 |
int temperaturaFierbere = 100; Console.WriteLine("Temperatura de fierbere a apei este " + temperaturaFierbere); Console.WriteLine("Temperatura de fierbere a apei este " + temperaturaFierbere.ToString()); Console.WriteLine(100.ToString()); Console.Read(); |
Consola va afișa:
Puteți vedea că toate cele trei metode vor produce același rezultat – conversie la tipul String. Diferența este că pentru prima linie, conversia se face automat. Ca regulă generală, se consideră o bună practică printre programatori utilizarea întotdeauna a tipului explicit de conversie, pentru a evita greșelile. În cazul conversiei implicite, rețineți că operatorul de concatenare (+) are aceeași prioritate cu semnul plus (+). Acest lucru înseamnă că ați putea intenționa să efectuați o adunare a două numere, apoi o concatenare, dar s-ar putea să aveți în schimb surpriza de a obține concatenarea valorilor ca șir de caractere. Luați în considerare următorul exemplu:
1 2 3 4 5 |
int x = 3; int y = 7; Console.WriteLine("Suma dintre 3 și 7 este " + x + y); Console.Read(); |
Șiiii… surpriză! Nu este chiar rezultatul pe care l-ați aștepta, nu-i așa?
Acest lucru se datorează faptului că atunci când este vorba de operatori care au aceeași precedență, ordinea de operare este de la stânga la dreapta. Ceea ce înseamnă că în cazul nostru, prima operație este de a concatena șirul „Suma dintre 3 și 7 este” cu numărul 3, care, așa cum am învățat, va fi convertit în mod implicit într-un șir de caractere. Acest lucru va returna tot un șir de caractere, care, ca următoare operație, va fi concatenat cu numărul 7, de asemenea convertit implicit, pentru succesul concatenării. De aceea, conversia implicită poate fi periculoasă, și ar trebui să o evitați. În schimb, puteți forța ordinea operațiilor, așa cum am discutat într-o lecție anterioară. Codul de mai jos va produce rezultatul corect:
1 2 3 4 5 |
int x = 3; int y = 7; Console.WriteLine("Suma dintre 3 și 7 este " + (x + y)); Console.Read(); |
Prin plasarea 7 + 3 în paranteze, care au o precedență de operator mai mare decât adăugarea sau concatenarea, forțăm compilatorul să efectueze mai întâi operația dintre paranteze, apoi concatenarea cu șirul de caractere. Având două numere în interiorul parantezelor va avea ca rezultat efectuarea adunarii, nu concatenării.
Conceptele explicate în această lecție sunt prezentate și vizual, ca parte a următorului videoclip: