Evaluare utilizator: 0 / 5

Steluță inactivăSteluță inactivăSteluță inactivăSteluță inactivăSteluță inactivă
 

Conversia tipurilor de date în C# poate fi făcută implicit sau explicit.

Conversia Implicită

Conversia implicită este utilizată atunci când nu există un risc de a pierde date în timpul conversiei. Atunci când facem o convesie implicită nu este necesar să utilizăm un operator și, de aceea, această conversie poartă denumirea de conversie implicită. Conversia implicită este făcută automat de compilator când atribuim o valoare al unui tip de dată cu rang inferior către o variabilă cu rang mai mare sau dacă o expresie are tipuri de date cu ranguri diferite.

{jcomments on}

Exemplu:

int a = 10;

Console.WriteLine(a); // 10

long b = a;

Console.WriteLine(b); // 10

Console.WriteLine(a+b); // 20

Iată câteva exemple de conversii implicite al tipurilor de date primitive în C#:

  •           sbyte → short, int, long, float, double, decimal;
  •          byte → short, ushort, int, uint, long, ulong, float, double, decimal;
  •         short → int, long, float, double, decimal;
  •          ushort → int, uint, long, ulong, float, double, decimal;
  •         char → ushort, int, uint, long, ulong, float, double, decimal
  •         uint → long, ulong, float, double, decimal;
  •          int → long, float, double, decimal;
  •         long → float, double, decimal;
  •         ulong → float, double, decimal;
  •         float → double.

Nu există risc de a pierde date atunci când convertim tipuri de date de un rang inferior către tipuri de rang superior. Există, totuși, câteva excepții atunci când convertim tipul int către float 32-bit și long 64-bit către double 64-bit.

Conversia explicită

Conversia explicită este utilizată atunci când este posibil să pierdem date în timpul conversiei. În principiu, conversia explicită este utilizată atunci când convertim un tip de dată de rang inferior către un tip de dată cu rang superior.

Exemplu:

double c = 6.9d;

Console.WriteLine(c); // 6.9

int d = (int)c;

Console.WriteLine(d); // 6

Conversia de la un tip de dată superior către unul inferior trebuie făcută cu atenție deoarece valoarea variabilei rezultate poate să depășească domeniul de valori al tipului de dată de rang inferior. Așa că, utilizați domenii de valori suficiente, atunci când vreți să faceți o conversie explicită.

C# ne oferă posibilitatea să fim notificați atunci când obținem o valoare greșită în urma unei depășiri a domeniul de valori (overflow) prin utilizarea conversiei explicite. Acesta este făcută de cuvântul cheie checked utilizat pentru tipul întreg de date.

Exemplu:

double e = 6e9d; // 6 * 10^9

Console.WriteLine(e); // 6000000000

int i = checked((int)e); // System.OverflowException

Console.WriteLine(i);

Atenție!

Conversia de la sau către tipul șir (string) nu este posibilă prin conversia explicită. Conversia către tipul string se face utilizănd operatorul + sau metoda ToString().

Exemplu de cod:

//Conversie implicita

int a = 10;

Console.WriteLine(a); // 10

long b = a;

Console.WriteLine(b); // 10

Console.WriteLine(a+b); // 20

//Conversie explicita

double c = 6.9d;

Console.WriteLine(c); // 6.9

int d = (int)c;

Console.WriteLine(d); // 6

//Verificare depasire domeniu de valori

double e = 6e9d; // 6 * 10^9

Console.WriteLine(e); // 6000000000

int i = checked((int)e); // System.OverflowException

Console.WriteLine(i);