SORU
8 Kasım 2009, Pazar


//Try catch arasındaki fark atmak ve/(e)/e try at

Ne arasındaki farktır

try { }
catch
{ throw; }

ve

try { }
catch(Exception e)
{ throw e;}

?

Ve ne zaman birini ya da diğerini mi kullanmalıyım?

CEVAP
8 Kasım 2009, Pazar


Bu yapılar

try { ... }
catch () { ... } /* You can even omit the () here */

try { ... }
catch (Exception e) { ... }

her iki yakalayacak içinde benzerheristisna try bloğun içine atılan (ve sadece bu özel durumlar oturum açmak için kullandığınız sürece, olmalıdırkaçınılmalıdır). Bak bu şimdi:

try { ... }
catch ()
{
    /* ... */
    throw;
}

try { ... }
catch (Exception e)
{
    /* ... */
    throw;
}

try { ... }
catch (Exception e)
{
    /* ... */
    throw e;
}

Birinci ve ikinci deneyin-catch TAM olarak aynı şey blok, onlar sadece yeniden oluşturma mevcut durum ve özel durum devam edecektir "kaynak" ve yığın izleme.

Üçüncü blok farklıdır try-catch. Ne zaman atar hariç, değiştirecek kaynak ve yığın izleme, ki görünen durum olmuştur atılan bu yöntem, çok çizgi throw e yöntemi içeren bu try-catch bloğu.

Hangisini kullanmalıyım? Gerçekten her durumda bağlıdır.

Hadi bir veritabanına devam edeceği .Save() bir yöntem ile Person bir sınıf olduğunu varsayalım. Hadi uygulamanız bir yere Person.Save() yöntem yürüten söylüyorlar. Eğer DB Kişiyi kurtarmak için reddederse, o zaman .Save() bir özel durum oluşturur. Bu durumda throw throw e kullanmalısınız? Yani, duruma göre değişir.

Ben tercih ne yapıyor:

try {
    /* ... */
    person.Save();
}
catch(DBException e) {
    throw new InvalidPersonException(
       "The person has an invalid state and could not be saved!",
       e);
}

Bu "" atmak olmaktan daha özel. İç özel Durum olarak DBException koymak gerekir Ne zaman inceleyin bu İnvalidPersonException, yığın izleme içerir bilgi geri Kaydet yöntemi (olabilir yeterli seni çözmek için sorun), ama hala erişim için orijinal durum eğer ihtiyacın olursa.

Ne zaman son bir söz olarakbekliyorbir istisna, gerçekten eğer tercih etmelisiniz bir İnvalidPersonException bekliyor iseniz, belirli bir durum ve ** 20, genel bir ıe..

try { ... }
catch (InvalidPersonException e) { ... }

için

try { ... }
catch (Exception e) { ... }

İyi şanslar!

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • fufko

    fufko

    27 ŞUBAT 2006
  • Ownage Pranks

    Ownage Prank

    13 AĞUSTOS 2007
  • Whizzpopping

    Whizzpopping

    10 Kasım 2005