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.
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.
finallybloğ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.