Convert.ToInt32 ve Int32.Parse arasındaki farklılıklar ve Int32.TryParse

22 Temmuz 2011
Bu yazıyı beğendiysen paylaşmayı unutma :)
Pin It

C# ile string formatındaki verilerin convert edilmesi için kullandığımız ve bu metotların veri tipini oluşturan Int32; 32 bit işaretli tam sayıları ifade ederken, alabileceği değerler 2.147.483.647 ve -2,147,483,648 arasında değişiyor.

Peki, dönüştürme işlemlerinde hangi metodu kullanmalıyız? Bu sorunun cevabını arasındaki farklılıkları inceleyerek birlikte karar vereceğiz.

Mutfağa buyurun..

Int32.Parse(string s)

Int32.Parse metodunun 3 adet Exception’ı bulunur. Bunlar ArgumentNullException, FormatException ve OverflowException‘dır.

ArgumentNullException: Giriş değeri null olduğu zaman gerçekleşir.
FormatException: Giriş değeri doğru formatta olmadığı zaman gerçekleşir. Örneğin; alfanümerik bir değer gibi.
OverflowException: Giriş değeri Int32 sınırlarını aştığında gerçekleşir.

Şimdi bu 3 Exception’ı da ayrı ayrı çalıştıracak bir örnek oluşturalım.

string metnim1 = null;
string metnim2 = "123.456";
string metnim3 = "12345678910111213141516";
string metnim4 = "123456";
int sonuc;

sonuc = Int32.Parse(metnim1); // sonuc > ArgumentNullException
sonuc = Int32.Parse(metnim2); // sonuc > FormatException
sonuc = Int32.Parse(metnim3); // sonuc > OverflowException
sonuc = Int32.Parse(metnim4); // sonuc > 123456

şeklinde sonuçlanacaktır. Durumu gerçeklemek için aşağıdaki kodu kullanabiliriz.

protected void Page_Load(object sender, EventArgs e)
{
string metnim1 = null;
string metnim2 = "123.456";
string metnim3 = "12345678910111213141516";
string metnim4 = "123456";
int sonuc;

try
{
// Buradaki sonuc alanlarını tek tek açıp kapatarak durumlarını izleyebilirsiniz.
sonuc = Int32.Parse(metnim1); // sonuc > ArgumentNullException
//sonuc = Int32.Parse(metnim2); // sonuc > FormatException
//sonuc = Int32.Parse(metnim3); // sonuc > OverflowException
//sonuc = Int32.Parse(metnim4); // sonuc > 123456
lblBilgi.Text = sonuc.ToString();
}
catch (FormatException)
{
lblBilgi.Text = "Giriş doğru formatta değil, dönüştürme yapılamadı.";
}
catch (ArgumentNullException)
{
lblBilgi.Text = "Giriş değeri null olduğu için, dönüştürme yapılamadı.";
}
catch (OverflowException)
{
lblBilgi.Text = "Giriş değeri Int32 sınırlarını aştı, dönüştürme yapılamadı.";
}
}

Kodu düzenleyerek aşağıdaki örneklerimizde de kullanabilirsiniz.

Convert.ToInt32

Convert.ToInt32 metodunun Int32.Parse’tan en önemli farkı, yalnızca string verileri Int32 türüne çevirmek değil, bunların dışında bool, byte, char,DateTime, decimal, double, float, int, long, object, sbyte, short, string, uint, long ve short veri tiplerine de çevirebiliyor olması geliyor.

İkinci önemli fark ise Int32.Parse’ın aksine 2 exception’a sahip olması. Bunlar FormatException ve OverflowException‘dır. Fark ettiğiniz üzere ArgumentNullException Convert.ToInt32 bulunmuyor. Sebebi ise giriş verisinin null olması durumunda hata fırlatmak yerine geriye 0 değeri döndürmesinden kaynaklanıyor. Int32.Parse örneğimizde olduğu gibi bunu da aşağıdaki gibi gerçekleyelim.

string metnim1 = null;
string metnim2 = "123.456";
string metnim3 = "12345678910111213141516";
string metnim4 = "123456";
int sonuc;

sonuc = Convert.ToInt32(metnim1); // sonuc > 0
sonuc = Convert.ToInt32(metnim2); // sonuc > FormatException
sonuc = Convert.ToInt32(metnim3); // sonuc > OverflowException
sonuc = Convert.ToInt32(metnim4); // sonuc > 123456

Int32.TryParse(string s, out int result)

Int32.TryParse; işleme sokulacak olan verinin, tipini sorgulayarak bizlere bool yani mantıksal bir ifade geri döndürür. Int32.Parse ve Convert.ToInt32’de belirttiğimiz exceptionların tümü Int32.TryParse’ta toplu halde bulunur. Yani convert yapacağınız verinin null, doğru formatta olup olmaması ya da Int32 sınırlarını aşması gibi durumlarda geriye bool veri tipinde false değeri döndürür. Ancak bunu int veri tipinde saklar ve dolayısı ile görünen sonuç “0” olarak gönderilir.

Hemen aynı örneğimizi uygulayalım.

string metnim1 = null;
string metnim2 = "123.456";
string metnim3 = "12345678910111213141516";
string metnim4 = "123456";
int sonuc;

sonuc = Int32.TryParse(metnim1); // sonuc > 0
sonuc = Int32.TryParse(metnim2); // sonuc > 0
sonuc = Int32.TryParse(metnim3); // sonuc > 0
sonuc = Int32.TryParse(metnim4); // sonuc > 123456

Sonuç..

Artık iki yönteminde aralarındaki farklılıkları öğrendiğimize göre; yaptığınız convert işlemlerinde ihtiyacınıza göre Convert.ToInt32’de Int32.Parse’e da kullanabilir, Int32.TryParse ile convert işleminden kaynaklanacak exceptionların önüne geçebilirsiniz.
Kaynaklar

– Int32.Parse metodu hakkında detaylı bilgi için;
http://msdn.microsoft.com/en-us/library/b3h1hf19.aspx

– Int32.TryParse metodu hakkında detaylı bilgi için;
http://msdn.microsoft.com/tr-tr/library/f02979c7.aspx

– Convert.ToInt32 metodu hakkında detaylı bilgi için;
http://msdn.microsoft.com/en-us/library/sf1aw27b.aspx

Benzer Yazılar


DeliPenguen'i Google+'da bulun



  1. Sinan
    23 Temmuz 2015 - 12:07

    s.a.

    Gerçekten güzel ve özet bir anlatım.
    Allah razı olsun.

  2. 16 Haziran 2016 - 14:39

    Harika bir anlatım. Çok teşekkür ederim.