Merhabalar, C# ArgumentException – Nedenleri ve Kullanımı dersimde farklı bir konuya değinmek istedim. C# eğitim setimde ayrıntılı bir şekilde anlatmış olduğum Try Catch dersimi tamamlayacak bir ders olarak görebilirsiniz. Sık sık karşılaştığımız diğer Exception’ları da bu şekilde vereceğim.
Exception ‘ın Türkçe Karşılığı İstisna demektir. C#’da hata yakalama için kullandığımız try catch ile birlikte kullanırız. Hata yakalama da bir Exception belirtmek zorunda değiliz ancak verilen farklı exception ‘lar (hatalar) için farklı aksiyonlar almak gerekebilir. Bu sebeple farklı exception’ları bilmemiz ve kullanmamız gerekir.
Ek olarak bu Exceptionları sadece bir hata çıkması durumuna karşın kullanmayız. Farklı kullanım şekilleri de vardır. Yazdığımız bir metodun işlemleri sırasında istediğimiz bir noktada istediğimiz türden Exception gönderebiliriz. Diğer bir değiş ile Exceptionları bir hata olmadığı halde biz istedik diye gönderilmesini sağlayabiliriz. Örneğin, bir sayının tek mi çift mi olduğunu bulan metodumuzun sayının tek olması durumunda ArgumentException dönmesini sağlayabiliriz.
C# ArgumentException – Nedenleri ve Kullanımı
Devralma : Object > Exception > SystemException > ArgumentException
Bu yazıda sık sık karşılaştığımız Exception yani hatalardan ve ortaya çıkma sebeplerinden bahsedeceğim.
ArgumentException Nedenleri
Bir işlem için kullanılmak istenen ve NULL olmayan, bağımsız bir değişkenin, işlemde kullanılması için belirtilen değişen tipine uymaması yani geçersiz olduğu durumlar çıkar.
Örnek: Aşağıda internetten rastgele bulduğum bir kod satırını görmektesiniz. İlk kod satırımızdaki şekilde bir yol üzerinden dosyaya ulaşmaya çalışırsak ArgumentException alırız. Çünkü buradaki UIImageRes adlı metodun istediği şey bir dosya yoludur. Ancak ilk satırda verilen yol C# için doğru değildir. Yani bu geçersiz bir bağımsız değişkendir.
//ArgumentException verir. private UIImageRes ClickImage = new UIImageRes(@"..\..\Resources\active.png",new Rectangle()); //ArgumentException vermez private UIImageRes ClickImage = new UIImageRes(@"C:\Desktop\File\Resources\cactive.png",new Rectangle());
ya da
// ArgumentException Verir cmd.Parameters.AddWithValue("@Country", DropDownListCountry.SelectedItem); //ArgumentException Vermez cmd.Parameters.AddWithValue("@Country", DropDownListCountry.SelectedItem.ToString());
bu örnekte de bir şehir bilgisinin listelendiği bir dropdownlist nesnesinden seçilen item’i alınmak isteniyor. Ancak bu gibi nesnelerde item ‘ler bir dizi gibi içerisinde birden fazla veri tutarlar. Bu sebeple sadece SelectedItem demek geçersiz bir değer olur. Ancak ToString() ile string türüne dönüştürdüğümüzde kayıt sorunsuz gerçekleşir.
ArgumentException Kullanımı
Yukarıda sayının tek mi çift mi olduğunu bulma hakkında bir örnek vermiştim şimdi o örneği kodlayalım.
#region ArgumentException Çıkarma ve Yakalam Örneği private void btn_ArgumentException_Click(object sender, EventArgs e) { txt_cikti.Text = ""; int[] sayilar = { 10, 7 }; foreach (var sayi in sayilar) { try { SayiKontrol(sayi); } catch (ArgumentException ex) { txt_cikti.Text += ex.GetType().Name + ":" + ex.Message; } } } static int SayiKontrol(int sayi) { if ((sayi & 1) == 1) throw new ArgumentException(sayi.ToString() + " Sayı çift sayı değil", "sayi"); return sayi / 2; } #endregion
Örnekte gördüğünüz gibi
throw new ArgumentException(sayi.ToString() + " Sayı çift sayı değil", "sayi");
bu satırda throw new diyerek yeni bir exception tanımladık ve hata olarak görünecek açıklamayı kendimiz yazdık.
Bu örnekte görüldüğü gibi istediğimiz şekilde Exception ‘ları kullanabiliriz. Bunlar sadece Try Catch bloğunda kullanılmak için yapılmamıştır.
Daha fazla bilgiye Microsft.Docs sitesinden ulaşabilirsiniz.
C# ArgumentException – 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.
Teşekkürler.
Rica ederim