C# Try Catch Finally Kullanımı

Ağustos 11, 2016 Mustafa BÜKÜLMEZ 0 Yorum


Selamlar Arkadaşlar

Bu makalemde Try Catch kullanımını anlatacağım. Try Catch C# da hata yakalama işlemleri için kullanılmaktadır. Hatta bu hataları lehimize bile kullanabiliriz. :D

Genel olarak hata çıkabileceğini tahmin ettiğimiz kod bloklarını Try Catch içerisine alarak hata kontrollerini yapabiliriz. Tabi ama her zaman bunu kullanmakta bazı sorunları beraberinde getiriyor. Örn. Birbirine bağlı 3 4 formunuz var ve hepsi de Try içerisinde. böyle durumlarda hatanın tam olarak nerde verdiğini bulmakta zorlanabiliyoruz. Şimdi buna bir örnek veremem ama zamanla sizde bunu tecrübe edeceksiniz.

Birde şöyle düşünün oldu ya programda bir hata çıktı. Hatanın ne olduğunu anlamadınız ve sürekli çıkıyor. Şimdi Kullanıcıya sürekli böyle abuk sabuk hatalar mı göstermek istersiniz yoksa sizin belirlediğiniz bir uyarı mı çıksın istersiniz?

Artık anlatıma başlayalım yavaştan...

Projemizde yeni bir form açalım 2 adet textbox, 1 adet button ve 1 adet label ekleyelim.

Senaryomuzda şu olsun. Textboxlara girilecek 2 sayının toplama işlemini yapalım ve sonucu labele yazdıralım.

Butonumuzun click eventine şu kodları yazalım

 private void Button1_Click(object sender, EventArgs e) 
{
   // string olarak gelen değerleri int tipine dönüştürdük.
   int Sayi_1 =    Convert.ToInt32(TextBox1.Text);
   int Sayi_2 =    Convert.ToInt32(TextBox2.Text);  
   int sonuc = Sayi_1 + Sayi_2 ;
   label1.Text = sonuc .ToString();
}

Toplama işlemimizi yaptık. Şimdi toplama işlemini yaparken Text alanlar arasında toplama işlemi yapamayız. Çünkü sayı yazmış da olsa metin olarak algılar ve " + " kullandığımızda iki sayıyı yan yana yazar. Toplama işlemi için convert işlemi yani dönüştürme işlemimi yaptık. Toplamayı yaptıktan sonra sonucu yine Text(string) olarak tekrar convertledik. Bunu da yapmazsak sayıyı labelin Text'ine atayamayız.


Şimdi butona tıkladığımızda toplama işlemini yapıp labelin text'ine yazacak. Bunda bir sorun çıkmaz. Lakin textboxlardan birine harf de yazarsak ne olur??


İşte bu olur :D Böyle bir hata alırsınız. Bu hata "Harfi sayıya çeviremedim" gibi bir anlama gelir. Daha doğrusu " convert " hatasıdır. Çünkü harf sayıya çevrilemez.

İşte burada  Try Catch işin içine girer.
Birde aynı kodu Try Catch ile yazalım.

 private void Button1_Click(object sender, EventArgs e) 
{
          try
         {
               // string olarak gelen değerleri int tipine dönüştürdük.
               int Sayi_1 =    Convert.ToInt32(TextBox1.Text);
               int Sayi_2 =    Convert.ToInt32(TextBox2.Text);  
               int sonuc = Sayi_1 + Sayi_2 ;
               label1.Text = sonuc .ToString();
         }
         catch 
         {
                MessageBox.Show("Lütfen sadece sayı yazınız.");
         }
}

Artık hata mesajı olarak sadece sizin yazdığınız bildiri çıkacaktır.

Eğer sizin yazdığınız bildirim ile birlikte hatanın ne olduğunu da yani hata mesajını da görmek isterseniz;

 private void Button1_Click(object sender, EventArgs e) 
{
   try
         {
               // string olarak gelen değerleri int tipine dönüştürdük.
               int Sayi_1 =    Convert.ToInt32(TextBox1.Text);
               int Sayi_2 =    Convert.ToInt32(TextBox2.Text);  
               int sonuc = Sayi_1 + Sayi_2 ;
               label1.Text = sonuc .ToString();
         }
         catch (Exception Ex)
         {
                MessageBox.Show("Lütfen sadece sayı yazınız." + Environment.NewLine + Ex.ToString());
         }
}

Şeklinde yapabilirsiniz. Burada Catch in yanına yazdığınız (Exception Ex) ile hata mesajının ne olduğunu  da almış olursunuz.

Environment.NewLine + ile bir alt satıra geçersiniz. Yani ENTER tuşuna basmış gibi :)

Unutmadan bir de bu var; Finally blogu

 private void Button1_Click(object sender, EventArgs e) 
{
   try
         {
               // string olarak gelen değerleri int tipine dönüştürdük.
               int Sayi_1 =    Convert.ToInt32(TextBox1.Text);
               int Sayi_2 =    Convert.ToInt32(TextBox2.Text);  
               int sonuc = Sayi_1 + Sayi_2 ;
               label1.Text = sonuc .ToString();
         }
         catch (Exception Ex)
         {
                MessageBox.Show("Lütfen sadece sayı yazınız." + Environment.NewLine + Ex.ToString());
         }
         finally
        {
               Sayi_1  = 0;
               Sayi_2  = 0;
               sonuc  = 0;
              label1.Text   = "İşlem Yapılmadı";

        }
}
Finally blogunda da değişkenleri yada nesneleri vs. boşaltabiliriz.

Son  olarak çoklu Catch bloğu da kullanabiliriz. Lakin bunun için Exeption türlerini bilmemiz gerekir. Exeption türlerini ne nasıl oluşabileceklerini bilmeden bu hataları yönetemeyiz.

Çoklu Catch bloğu olan bir örnek;

private void Button1_Click(object sender, EventArgs e) 
{
   try
         {
               // string olarak gelen değerleri int tipine dönüştürdük.
               int Sayi_1 =    Convert.ToInt32(TextBox1.Text);
               int Sayi_2 =    Convert.ToInt32(TextBox2.Text);  
               int sonuc = Sayi_1 + Sayi_2 ;
               label1.Text = sonuc .ToString();
         }
         catch (OverFlowException Ex_1)
         {
           //Taşma hatası meydana gelirse çalıştırılacak kod bloğu
           MessageBox.Show("Bir taşma hatası meydana geldi." + Environment.NewLine + Ex.ToString());
         }
         catch (ArithmeticException Ex_2)
         {
             //Aritmetiksel hata meydana gelirse çalıştırılacak kod bloğu
             MessageBox.Show("Aritmetiksel  bir hata meydana geldi." + Environment.NewLine + Ex.ToString());
         }
         Catch (Exeption Ex)
         {
            MessageBox.Show("Lütfen sadece sayı yazınız." + Environment.NewLine + Ex.ToString());
         }
         finally
        {
               Sayi_1  = 0;
               Sayi_2  = 0;
               sonuc  = 0;
              label1.Text   = "İşlem Yapılmadı";

        }
}



Saygılarımla
Mustafa BÜKÜLMEZ
http://mustafabukulmez.com/



0 Yorum: