Yükleniyor...

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.");
}