5 - C# Değişken tipleri arasında dönüşüm yapmak

 Değişken tipleri arasında dönüşüm yapmak


Kapalı(bilinçsiz) ve açık(bilinçli) dönüşüm tipleri.

Kapalı dönüşüm (implicit conversion) veri tipleri arasında dönüşüm yaparken bunu otomatik olarak yapar. Bu tür dönüşümler düşük kapasiteli değişkenin daha yüksek kapasiteli değişkene atanması ile oluşur. Bunu tam tersi durum olan yüksek kapasiteli bir değişkeni düşük kapasiteli bir değişkene atamaya kalkarsak hata alırız.

Örnek:


string a = 3 + ""; 

int b = 2; 

Console.WriteLine(a + b); 

Console.ReadKey(); 

Çıktı : 32 

Yukarıda a değişkenini string türünden tanımladık, burada 3 ün yanına + "" ekleyerek string olarak tanımlanmasını sağladık, aynı işlemi string a = "3" yaparak da gerçekleştirebiliriz. Daha sonra int türünden bir b değişkeni tanımladık ve bu iki değişkeni toplayarak ekrana yazdırdık. C# burada otomatik dönüşüm yaparak (a + b)'yi string türüne dönüştürdü ve ekrana 3 ve 2'yi bitişik yazarak 32 yazdırdı. Bu olay kapalı yani biliçsiz dönüşüme bir örnektir.  

Örnek:

byte a = 3;

short b = 4;

short c = a + b;

Console.WriteLine(c); 

Console.ReadKey(); 

Yukarıdaki programı çalıştırdığımız zaman hata verecektir çünkü 3. satırda a + b ile toplama yaptık, bu toplama işlemi otomatik olarak int türüne dönüştü ve int türündeki bir değeri daha düşük kapasitede olan short türündeki c değişkenine atamaya çalışarak hatalı bir işlem yaptık. Bu tür hatalar yapmamak için aşağıdaki tabloya göz atabilirsiniz. Bilinçsiz tür dönüşüm aşağıdaki tablodaki gibidir: 

Açık(biliçli) dönüşümde (explicit conversion) ise değişkenler kullanıcı tarafından bazı metotlar yardımıyla dönüştürülür.

(hedef_tür)değişken_adı şeklinde kullanılır.


Açık dönüşümlerde büyük kapasiteli veri türünü daha düşük kapasiteli veri türüne dönüştürebiliriz.
Buna olaya casting denir. Açık dönüşüm yaparken veri kaybına uğrayabiliriz, buna dikkat etmeliyiz.

Örnek:

int a = 3; 
double b = 2.2; 
double c = (double)a + b; 
Console.WriteLine(c); 
Console.ReadKey(); 

Yardımcı sınıflar ile tür dönüşümleri

Parse metodu

String veri türündeki bir değeri başka bir veri türünü dönüştürmek için kullanılır. Parse metodu System sınıfına aittir. Parse metodunun yapısı aşağıdaki gibidir. 

DeğişkenTürü.Parse(DönüştürülecekDeğer) 

Örnek: 

string s1 = "123";
string s2 = "342";
Console.WriteLine(Int32.Parse(s1).GetType());
Console.WriteLine(Int32.Parse(s2).GetType());
Çıktı : 
System.Int32 
System.Int32 

TryParse Metodu 

Parse metodu ile aynı çalışır tek farkı; değişken string türünden farklı ise, dönüşecek değerin sınırları altında veya üsütünde ise, null değerine sahip ise, herhangi bir hata oluşturacak bir durum var ise 0 değerini döndürür.   
 

DeğişkenTürü.TryParse(Dönüştürülecek Değer, out DönüşecekDeğer)

veya

DeğişkenTürü.TryParse(Dönüştürülecek Değer, out değişkenTipi DönüşecekDeğer)

Şeklinde kullanılır. Dönüşüm sorunsuz gerçekleşti ise true bir hata meydana geldi ise false değerini döndürür ve program çalışmaya devam eder.

Örnek1 :
string s1 = "123"; 
int s3; 
Console.WriteLine(Int32.TryParse(s1, out s3)); 
Console.WriteLine(s3); 
Console.ReadKey(); 

Örnek2: 
string s1 = "123"; 
Console.WriteLine(Int32.TryParse(s1, out int s3)); 
Console.WriteLine(s3); 
Console.ReadKey(); 

Çıktı:
True
123

Convert metodu 

Değişken tiplerini dönüştürmek için kullanılır ve sistem sınıfına aittir. 


Örnek soru: Klavyeden girilen 3 sayının ortalmasını dönüşüm metotlarını kullanarak yazınız.

Kod:

int a, b, c; 
Console.WriteLine("Üç sayı giriniz :"); 
a = Int32.Parse(Console.ReadLine()); 
b = Convert.ToInt32(Console.ReadLine()); 
c = Convert.ToInt32(Console.ReadLine()); 
double orta = Convert.ToDouble(a + b + c) / 3; 
Console.WriteLine(orta); 
Console.ReadKey(); 

Çıktı:
Üç sayı giriniz :
3
2
3
2,66666666666667
 

Yorumlar