Bir proje yaptığımızda her metod için ayrı try catch blokları yazmak yerine tek bir hata yakalama blogu yazarak daha kolay hale getirebiliriz.
Öncelikle basit bir proje üzerinde klasik bir try catch blogu oluşturalım.
class Program
{
static void Main(string[] args)
{
GetValueFromDictionary();
}
public static void GetValueFromDictionary()
{
try
{
Dictionary<string, string> dictionary = new Dictionary<string, string>();
dictionary.Add("Table", "Tablo");
dictionary.Add("Computer", "Bilgisayar");
dictionary.Add("Article", "Makale");
//dictionary içinde ekli olmayan bir key değeri verirsek
Console.WriteLine(dictionary["Rose"]);
}
catch(Exception exception)
{
Console.WriteLine(exception.Message);
}
}
Aşağıdaki hatayı alıcaz :

şimdi action delegasyonunu kullanalım.
Ana projemizin içine aşağıdaki methodu eklemeliyiz.
//parametresiz(void) metodlar için kullanılır.Return göndermez.
private static void HandleException(Action action)
{
try
{
//metodu burda çalıştırması için Invoke kullanıyoruz.
action.Invoke();
}
catch(Exception exception)
{
Console.WriteLine(exception.Message);
}
}
Daha sonra metodumuzu try catch içine almaya gerek kalmayacak.
public static void GetValueFromDictionary()
{
Dictionary<string, string> dictionary = new Dictionary<string, string>();
dictionary.Add("Table", "Tablo");
dictionary.Add("Computer", "Bilgisayar");
dictionary.Add("Article", "Makale");
//dictionary içinde ekli olmayan bir key için key değeri verirsek
Console.WriteLine(dictionary["Rose"]);
}
aşağıda verilen şekilde action delegasyo metodu kullanılmalıdır.
static void Main(string[] args)
{
//GetValueFromDictionary();
HandleException(() =>
{
GetValueFromDictionary();
});
}

Sonuç olarak :
Tek bir try catch blogu yazarak istediğimiz metodu gönderip hata kontrolü yapabiliriz. 🙂