Sayfalar

28 Ağustos 2019 Çarşamba

Try Catch


Try Catch bloklarında birden fazla özel catch bloğu yazılabilir ve spesifik bir hatanın izi sürülebilir..


static void Main(string[] args)
{
    try
    {
        string[] cities1 = new string[] { "Ankara,Adana,Ağrı" };
 
        cities1[3= "istanbul,Bartın,Antalya";
    }
    catch (IndexOutOfRangeException ex)
    {
        Console.WriteLine(ex.Message);  // Sonuç: Dizin, dizi sınırları...
    }
 
    catch (Exception ex)
    {
 
        Console.WriteLine(ex.Message);
    }
 
    Console.ReadLine();
 
}

Kendi Hata Durumlarımızı Takip Etmek ....

Örneğin DB üzeründe bir arama işlemi yapan kullanıcıya veri bulunamaz ise fırlatılacak bir hata tasarlayalım...

Ayrı bir sınıf olarak "NoRecordReturnException" sınıfını tanımlarız ve bunu Exception sınıfından inherit ederiz.

İşlemlerin yapılacağı metotun içinde bir if else bloğu ile hatayı tespit eder ve bu noktada new throw ile execption sınıfmızı fırlatırız..

Main blokta ise catch bloğunda kendi Exception sınıfımızı tanımlayarak hatayı yakalarız.

Hatanın mesajını özelleştirmek istersek Expection sınıfından miras aldığımız için Message() metodunu ezmeyi denediğimizde Message metodu ulaşılamaz olduğunu anlarız bunun için Exception sınıfımızda ctor oluşturduktan sonra Base klasa parametre olarak mesaj gövdesini yollarız.


class Program
  {
      static void Main(string[] args)
      {
          try
          {
              Find();
          }
          catch (NoRecordReturnException ex)
          {
              Console.WriteLine(ex.Message);
          }
 
          Console.ReadLine();
      }
 
      public static void Find()
      {
          List<Student> students = new List<Student>()
          {
          new Student() { Id = 1, Name = "Ali", Surname = "Desidero" },
          new Student() { Id = 2, Name = "Aliy", Surname = "Yesidero" },
          new Student() { Id = 3, Name = "Alin", Surname = "Nesidero" }
 
          };
 
          var result = students.FirstOrDefault(s=>s.Id==4);
 
          if (result!=null)
          {
              Console.WriteLine("Record Found");
          }
          else
          {
              throw new NoRecordReturnException("Kayıt bulunamadı");
          }
      }
 
  }
  class Student
  {
      public int Id { getset; }
      public string Name { getset; }
      public string Surname { getset; }
  }
 
  public class NoRecordReturnException : Exception
  {
      //message metotu ezilemediği için 
      //Exception klasına iletip oradan çaığrıyoruz.
      public NoRecordReturnException(string message):base(message)
      {
 
      }
       
  }


Aynı kodları Action Delegate ilede yazarsak.

HandleException adlı bize ait bir metot yazarız ve parametre olarak Action tipinde bir değer yollanır. Action aslında parametre olarak metotları yollayabileceğimiz yöntemdir. Buradada action olarak Find() metotunu  yollar ve HandleException > try bloğunun içinde Invoke ile Find() metotunun çalışmasını sağlarız.
Find metotu > Else içinde hata fırlatılır böylece NoRecordReturnExp sınıfı ctor'da newlenirken, miras olarak alınan fakat ezilemeyen Message() metotuna ulaşmak için base klasa string olarak ekrana yazdıracağımız mesajı iletiriz. HandleException > catch bloğundada hata yakalanır ve mesaj ekrana iletilir...


class Program
  {
      static void Main(string[] args)
      {
 
          HandleException(() =>
          {
              Find();
          });
 
          Console.ReadLine();
      }
 
      public static void Find()
      {
          List<Student> students = new List<Student>()
          {
          new Student() { Id = 1, Name = "Ali", Surname = "Desidero" },
          new Student() { Id = 2, Name = "Aliy", Surname = "Yesidero" },
          new Student() { Id = 3, Name = "Alin", Surname = "Nesidero" }
 
          };
 
          var result = students.FirstOrDefault(s => s.Id == 4);
 
          if (result != null)
          {
              Console.WriteLine("Record Found");
          }
          else
          {
              throw new NoRecordReturnException("Kayıt bulunamadı");
          }
      }
 
      public static void HandleException(Action action)
      {
          try
          {
              action.Invoke();
          }
          catch (Exception ex)
          {
 
              Console.WriteLine(ex.Message);
          }
      }
 
  }
  class Student
  {
      public int Id { getset; }
      public string Name { getset; }
      public string Surname { getset; }
  }
 
  public class NoRecordReturnException : Exception
  {
      //message metotu ezilemediği için 
      //Exception klasına iletip oradan çaığrıyoruz.
      public NoRecordReturnException(string message) : base(message)
      {
 
      }
 
  }




MVC LOADING TOO SLOW ISSUE