Merhabalar, C# FormatException – Nedenleri ve Kullanımı dersim ile Exceptions derslerime devam ediyorum. Önceki dersimde C# IndexOutOfRangeException – Nedenleri ve Kullanımı konusuna bakmıştık. Bu dersimizde ise veri tiplerinin convertleri sırasında çıkan özel durum üzerinde duracağız.
C# FormatException – Nedenleri ve Kullanımı
Devralma : Object > Exception > SystemException > FormatException
C# FormatException – Nedenleri
FormatException, özel durumu (istisna / hata ) veri tiplerinin convert işlemlerinde karşılaştığımız bir sorundur Örneğin “mustafa” string değerini int türüne convert etmeye çalışırsanız bu özel durum ortaya çıkar. Genellikle Convert, Parse ve ParseExact gibi işlemler esnasında ortaya çıkar.
Bu özel durumu yönetebilmek için Try Catch ile yakalamak gerekir. Çünkü genellikle dışarıdan girilen verilerin hatalı girilmesi neticesinde ortaya çıkmaktadır. Ya kullanıcıların hatalı veri girmesini engellemek ya da Try Catch kullanmak zorundayız.
Bu özel durumun tipik bir çıktısı vardır.
Dize geçerli bir XXXXX olarak tanınmadı.
Bu çıktı şeklindedir.
Kullanıcı bazlı olmayan çeşitleri için aşağıdaki örnekleri inceleyebilirsiniz.
- “True”, “False” , “true” , “false”, “0”, “1” ibareleri String’ten Bool’a convert edilebilir. Başka herhangi bir değerde FormatException özel durum döner.
- Tüm sayısal türler mutlaka 0-9 rakamları içermelidir. Farklı türde karakter içeren hiçbir değer sayısal türlere dönüştürülemez. Başka herhangi bir değerde FormatException özel durum döner.
- Zaman değerlerinde saat, dakika ve saniye ayracı üst üste iki nokta ( : ) karakteridir. Arada başka bir karakter var ise FormatException özel durum döner.
- vs.
NOT: C# Değişkenler, Tipleri, Atamalar ve Dönüşümleri ve C# Convert İşlemleri derslerimde bu convert işlemleri hakkında detaylı bilgiler verilmiştir.
#region IndexOutOfRangeException Çıkarma ve Yakalama Örneği private void btn_FormatException_Click(object sender, EventArgs e) { string s1 = "OK"; bool b2 = Convert.ToBoolean(s1); string s2 = "18 00"; DateTime dt = Convert.ToDateTime(s2); string s3 = "18:15"; double d1 = Convert.ToDouble(s3); } #endregion
Yukarıdaki dönüşümlerin her biri FormatException özel durumu döndürür.
C# FormatException – Kullanımı
Bu özel durumun kullanımı hakkında şöyle bir örnek verebiliriz. Kullanıcıdan almak istediğimiz bilgilerin belirli bir formatta olmasını istiyoruz diyelim. Eğer kullanıcı bizim isteiğimiz formatta bir veri girmez ise FormatException özel durumun gönderelim. Bu örnek için kafamdan bir format belirledim. Dışarıdan gelen değerin ilk iki karakteri MB olacak, son iki karakteri ise BM olacak. Bu kurala uyulmamış ise özel durumu gönderelim.
#region IndexOutOfRangeException Çıkarma ve Yakalama Örneği private void btn_FormatException_Click(object sender, EventArgs e) { string gelenDeger = "MB___asdasd_adas__@__asdasda@BüM"; try { Islem(gelenDeger); } catch (FormatException ex) { txt_cikti.Text += ex.GetType().Name + ":" + ex.Message; } } void Islem(string text) { if (text.Substring(0, 2) == "MB" & text.Substring(text.Length - 2, 2) == "BM") { MessageBox.Show("OK!"); } else { throw new FormatException("Gelen değer istenen formata uymuyor. İlk iki karakter MB, son iki karakter BM olmalıdır."); } } #endregion
Yukarıdaki örnekte gördüğünüz gibi, kafamdan uydurduğum kuralı denetledim ve uyulmaması durumunda bir özel durum çalıştırdım. Mantıken belirli bir formata uyulmasını istediğimizden FormatException özel durumunu kullandım.
C# FormatException – Nedenleri ve Kullanımı dersimiz de bu kadardı arkadaşlar.
Tüm Exceptions derslerime bağlantıdan ulaşabilirsiniz.
C Sharp Eğitim Seti eğitimi sayfasına gitmek için tıklayınız.
Derslerime özel olarak hazırladığım Github Projeme buradan ulaşabilirsiniz… Bu dersim Github projemde yerini almıştır. Tüm Exception adı altında eklediğim dersleri Github projeme ekleyeceğim.
Sağlıcakla ve takipte kalın.
Anlatım ve site tasarımı çok iyi sık kullanılanlarda ekli :)
Yorumunuz için teşekkürler. Elimden geldiğinde açık ve net anlatım yapmaya özen gösteriyorum.
Site tasarımını yakında değiştirmeyi düşünüyorum. Bu temada bir çok sıkıntı var ve düzeltmek için çok fazla müdahele yaptım. Bu ay ya da Şubat ayında büyük ihtimalle tema değişecek. Elbette çok daha iyi bir tema ile… :D