C# Veri Türü Dönüşümleri
C#’ta veri türü dönüşümlerini öğrenin. Implicit ve explicit casting, Parse, TryParse ve Convert yöntemleri örneklerle açıklanıyor.
Programlama sırasında farklı türdeki verilerle çalışırız. Kullanıcıdan gelen veriler genellikle string tipindedir,
fakat matematiksel işlemler yapabilmek için bu verileri sayısal tiplere çevirmek gerekir.
İşte bu noktada veri türü dönüşümleri (type conversion) devreye girer.
Bu yazıda C# dilinde tür dönüşüm yöntemlerini inceleyeceğiz.
Implicit ve Explicit Casting
Küçük bir veri tipinden büyük bir veri tipine dönüşüm implicit (örtük) olarak otomatik yapılır. Ancak büyükten küçüğe dönüşümde veri kaybı riski olduğundan explicit (açık) dönüşüm yapılmalıdır.
// Implicit casting
int sayi = 100;
long uzun = sayi; // otomatik dönüşüm
double ondalik = sayi; // int → double
// Explicit casting
double d = 12.9;
int i = (int)d; // 12, küsurat kaybolur
byte b = (byte)300; // 300, byte için çok büyük → taşma olur
Console.WriteLine(b); // 44
Convert Sınıfı ile Dönüşümler
Convert sınıfı, sık kullanılan tipler arasında güvenli dönüşümler yapmamızı sağlar.
string s1 = "42";
int sayi = Convert.ToInt32(s1);
string s2 = "3,14";
double pi = Convert.ToDouble(s2);
bool durum = Convert.ToBoolean(1); // true
string metin = Convert.ToString(12345);
Console.WriteLine(sayi);
Console.WriteLine(pi);
Console.WriteLine(durum);
Console.WriteLine(metin);
Parse ve TryParse Metotları
Parse hatalı girişte istisna fırlatırken, TryParse dönüşüm başarısızsa false döner.
Parse Örnekleri:
int i = int.Parse("123");
double d = double.Parse("12.5");
decimal fiyat = decimal.Parse("99.99");
bool b = bool.Parse("true");
Console.WriteLine(i);
Console.WriteLine(d);
Console.WriteLine(fiyat);
Console.WriteLine(b);
TryParse Örneği:
Console.Write("Bir sayı giriniz: ");
string girdi = Console.ReadLine();
if (int.TryParse(girdi, out int sonuc))
{
Console.WriteLine("Girdiğiniz sayı: " + sonuc);
}
else
{
Console.WriteLine("Geçersiz sayı girdiniz.");
}
Boxing ve Unboxing
Değer tiplerinin object içine sarılmasına boxing,
tekrar açılmasına unboxing denir.
int x = 10;
// Boxing
object obj = x;
// Unboxing
int y = (int)obj;
Console.WriteLine(y);
// Yanlış unboxing hata verir
object obj2 = "metin";
// int z = (int)obj2; // InvalidCastException
Tip Kontrolü ve Dönüşüm Operatörleri
is, as operatörleri ve GetType, typeof yapılarıyla tür kontrolü yapılabilir.
object veri = "Merhaba";
// is operatörü
if (veri is string)
Console.WriteLine("Veri string tipinde.");
// as operatörü
string str = veri as string;
if (str != null)
Console.WriteLine(str.ToUpper());
// GetType ve typeof
Console.WriteLine(veri.GetType()); // System.String
Console.WriteLine(typeof(int)); // System.Int32
Örnek Uygulama
Kullanıcıdan ürün bilgilerini string olarak alıp uygun tiplere dönüştürelim.
Console.Write("Ürün adı: ");
string urun = Console.ReadLine();
Console.Write("Adet: ");
string adetStr = Console.ReadLine();
Console.Write("Birim fiyat: ");
string fiyatStr = Console.ReadLine();
Console.Write("İndirim (%): ");
string indirimStr = Console.ReadLine();
Console.Write("Stokta var mı? (Y/N): ");
string stokStr = Console.ReadLine();
if (int.TryParse(adetStr, out int adet) &&
decimal.TryParse(fiyatStr, out decimal fiyat) &&
double.TryParse(indirimStr, out double indirim))
{
bool stok = stokStr.Trim().ToUpper() == "Y";
decimal toplam = adet * fiyat;
decimal indirimTutar = toplam * (decimal)(indirim / 100);
decimal genelToplam = toplam - indirimTutar;
Console.WriteLine($"\nÜrün: {urun}");
Console.WriteLine($"Adet: {adet}");
Console.WriteLine($"Birim Fiyat: {fiyat:0.00} TL");
Console.WriteLine($"İndirim: %{indirim}");
Console.WriteLine($"Stok: {(stok ? "Var" : "Yok")}");
Console.WriteLine($"Toplam: {genelToplam:0.00} TL");
}
else
{
Console.WriteLine("Geçersiz giriş yaptınız.");
}