C# Hata Yönetimi (Exception Handling)

Yazılım geliştirirken bazı hatalar (dosya bulunamaması, internet kopması, sıfıra bölünme vb.) sadece kod çalışırken ortaya çıkar. Bu durumlarda programın aniden "çökmemesi" için hataları yakalamamız ve yönetmemiz gerekir.

Hata Yönetim Blokları
  • Try: Hata oluşma ihtimali olan kodların yazıldığı bloktur.
  • Catch: Hata oluştuğunda ne yapılacağını belirleyen bloktur.
  • Finally: Hata olsa da olmasa da mutlaka çalışacak olan bloktur.

1) Temel Try-Catch Kullanımı

Aşağıdaki örnekte, kullanıcıdan alınan verinin geçersiz olması durumunda programın nasıl korunduğunu görebilirsiniz.

C# Try-Catch Example
try {
    Console.Write("Bir sayı giriniz: ");
    int sayi = Convert.ToInt32(Console.ReadLine());
    int sonuc = 100 / sayi;
    Console.WriteLine("Sonuç: " + sonuc);
} 
catch (DivideByZeroException ex) {
    Console.WriteLine("Hata: Bir sayı sıfıra bölünemez!");
}
catch (FormatException ex) {
    Console.WriteLine("Hata: Lütfen sadece rakam giriniz!");
}
catch (Exception ex) {
    Console.WriteLine("Beklenmedik bir hata oluştu: " + ex.Message);
}
finally {
    Console.WriteLine("İşlem tamamlandı."); // Veritabanı bağlantısı kapatmak için idealdir.
}

2) Hata Fırlatmak (throw)

Bazen hatayı sistemin değil, bizim fırlatmamız gerekir. Örneğin, kullanıcının girdiği yaş değeri negatif olamazsa, kendi hatamızı oluşturabiliriz.

if (yas < 0) {
    throw new Exception("Yaş değeri negatif olamaz!");
}

Sık Karşılaşılan Hata Tipleri

Hata Sınıfı Açıklama
NullReferenceException İçinde değer olmayan (null) bir nesneye erişmeye çalışmak.
IndexOutOfRangeException Dizinin sınırları dışındaki bir indekse erişmeye çalışmak.
FileNotFoundException Sistemde bulunmayan bir dosyayı açmaya çalışmak.
💡 Profesyonel İpucu: Her zaman daha spesifik hataları (DivideByZeroException vb.) en üste, genel Exception sınıfını ise en alta yazın. C# hataları yukarıdan aşağıya doğru kontrol eder.

Özet

  • Hata yönetimi sayesinde uygulama "beklenmedik şekilde kapandı" uyarısı vermez.
  • finally bloğu genellikle veritabanı bağlantılarını veya açık dosyaları kapatmak için kullanılır.
  • Kullanıcıya teknik hata mesajları yerine (ex.Message), anlayabileceği sade mesajlar gösterin.