TryParse() Kullanımı

C# içerisinde belki de en çok kullandığımız metodlardan biridir. Bir nesneyi dönüştürürken çeşitli hatalar ile karşılaşabiliriz. Bu hataların başında da “object reference not set to an instance of an object” yani “nesne başvurusu bir nesnenin örneğine ayarlanmadı” hatası gelir.

Bu hatanın en büyük nedenlerinden biri objenin içeriğinin boş olması veya istediğimiz tipe uygun olmamasıdır. Burada alabileceğimiz hatalardan bir diğeri de; “converting data type varchar to numeric” veya türevi hatalardır.

Genel kullanım olarak kurslar dahil bir çok kaynakta aşağıdaki gibi bir atama önerilmektedir;

string deger = "xxx";
int sonuc = -1;
try
{
    sonuc = int.Parse(deger);
}
catch (Exception ex)
{ }

Aslında işin özüne bakacak olursak bu hatalı bir metod değildir. Yalnızca işlemi yapabilmek için öyle ya da böyle 8 satırlık bir kod bloğu yazmak zorundayızdır. Bunu yazmak her ne kadar zor olmasa da büyük projeler karşımıza çıktığında ve bu tip atama kontrollerinin arttığı bir proje olduğunda kod sayfamız uzayıp giden bir desten halini alacaktır.

TryParse Nedir Ne İçin Kullanılır?

İşte yukarıdaki anlattığımız kalabalıktan kurtulmak için .net framework 4.8 itibari ile artık yeni bir fonksiyon hayatımıza girmiş bulunuyor. Elbette bizim dışımızda ya geri beslemeler ile ya da kendileri de zorlanmış olacaklar ki Microsoft bu fonksiyonu geliştirme ihtiyacı duymuş. 🙂

TryParse Nasıl Kullanılır?

Öncelikle TryParse, adından da anlaşılacağı gibi Try => Deneme, Parse => Ayrıştırma kelimelerinin birleştirilmiş hali; Yani “Ayrıştırma Deneme” gibi bir anlam taşıyor.

Yani işin özü o ki; Bir değişkeni başka bir değişkene dönüştürür iken (genellikle string türünden başka bir türe) kullanılacak bir metoddur. Kullanım şekli kısaca aşağıdaki gibidir;

string deger = "xxx";

int sonuc = -1;

int.TryParse(deger, out sonuc);

Gördüğünüz üzere “string” tipte bir değişkenin değerini “integer” tipinde bir değişkene atamak için kullanılır. Yukarıdaki “out” kelimesi, işlemin sonucunda çıktının hangi değişkene atacağını göstermektedir. Eğer olmayan bir değişken ismini verip ona yukarıdaki gibi bir atama yapmak isterseniz o zaman hatayla karşılaşacaksınızdır.

Burada altını çizmek istediğim bir husus ise TryParse’ın aynı zamanda metot olarak kendisinin de “boolean” tipte bir geri dönüşü olma halidir. Yani TryParse() metodu kendisi de aşağıdaki örnekte olduğu gibi, dönüştürmenin başarılı sonuçlanmış olma veya hatalı sonuçlanmış olma durumları için true/false bir değer dönmektedir.

string deger = "true";

if (bool.TryParse(deger, out bool sonuc))
{
    Console.WriteLine("Dönüştürme Başarılı. Sonuç: " + sonuc);
    Console.ReadKey();
}

Console.WriteLine("Dönüştürmede hata alındı!");
Console.ReadKey();

//Sonuç ekran çıktısı "Dönüştürme Başarılı. Sonuç: true" dur.

TryParse – Out İle Birlikte Kullanımı

Ancak bu durumunda bir çözümü düşünülmüş elbette. Her zaman için “output” nesnesinin önceden oluşturulmuş olması zorunluluğu olmaması gerektiği düşünülmüş olacak ki aşağıdaki şekilde de bir kullanım imkanı sunulmuş;

string deger = "xxx";

int.TryParse(deger, out int sonuc);

Burada gördüğünüz gibi önceden yukarıdaki ikinci örnekteki gibi önceden bir “integer” nesne oluşturmadık. Bu işlemin sonucunda in.TryParse metodu bizler için otomatik olarak “sonuc” isminde bir “integer” değer oluşturdu ve atamayı ona yaptı.

Yani sonuç olarak aşağıdaki gibi bir kod bloğunu bir konsol uygulaması ile çalıştırdığımızda;

string deger = "xxx";

int.TryParse(deger, out int sonuc);

Console.WriteLine(sonuc);
Console.ReadKey();

Ekran çıktımız “0” olacaktır. Yani işlemin başarısız olması durumunda (ki “xxx” değeri “integer” tipine dönüştürülemediği için) sonuç karşımıza “0” olarak çıkmaktadır.

Dönüştürdüğünüz tipler ne olur ise olsun; İster string => integer, string => boolean, string => decimal, ne olur ise olsun sonuç hep olumsuzundan çıkacaktır. Bir alttaki başlığımızda olumsuz örnekleri bir çok tip için bulabilirsiniz.

TryParse Doğru Kullanımı Nedir?

Benim de önerim bu metodu mümkün olduğunca kod kalabalığını önlemek adına bu şekilde kullanmaktır.

TryParse Kullanımı İle İlgili Denemeler ve Alınan Hatalar

string deger = "xxx";

int.TryParse(deger, out int sonuc);

Console.WriteLine(sonuc);
Console.ReadKey();

//Sonuç ekran çıktısı "0" dır.

Bool.TryParse() Kullanımı

string deger = "xxx";

bool.TryParse(deger, out bool sonuc);

Console.WriteLine(sonuc);
Console.ReadKey();

//Sonuç ekran çıktısı "False" dur.

Decimal.TryParse() Kullanımı

string deger = "xxx";

decimal.TryParse(deger, out decimal sonuc);

Console.WriteLine(sonuc);
Console.ReadKey();

//Sonuç ekran çıktısı "0" dır.

Float.TryParse() Kullanımı

string deger = "xxx";

float.TryParse(deger, out float sonuc);

Console.WriteLine(sonuc);
Console.ReadKey();

//Sonuç ekran çıktısı "0" dır.

Byte.TryParse() Kullanımı

string deger = "xxx";

byte.TryParse(deger, out byte sonuc);

Console.WriteLine(sonuc);
Console.ReadKey();

//Sonuç ekran çıktısı "0" dır.

Yukarıda hep dönüştürülemeyen tipte değerler vermemin nedeni, zaten doğru değer vermeniz halinde dönüştürmede bir sorun yaşamayacağınız içindir. Çünkü TryParse kullanımında en önemli husus, hata olması durumunu takip etmektir.

Eğer int.TryParse() içindeki dönüştürmede bir hata almışsanız ve bunu kontrol edip, sadece hata olmaması durumunda devam etmek istiyorsanız aşağıdaki şekilde kullanımda bulunabilirsiniz;

TryParse Dönüştürme İşlemi Başarılı Mı Kontrolü

string deger = "true";

if (bool.TryParse(deger, out bool sonuc))
{
    //Dönüştürme işlemi başarılı ise buradan devam edecektir...
}

Console.WriteLine("Dönüştürmede hata alındı!");
Console.ReadKey();

İşte konumuz kısaca 🙂 bu kadar. Eğer sorularınız olur ise aşağıdaki yorumlar kısmından bana iletebilirsiniz. Yanıtlamaktan memnuniyet duyarım. İyi çalışmalar… 🙂

0 0 vote
Article Rating
Share this Story

Related Posts

Subscribe
Bildir
guest
0 Yorum
Inline Feedbacks
View all comments

Sponsor Bağlantılar

Sponsor Bağlantılar