SORU
25 EYLÜL 2008, PERŞEMBE


Birden çok istisna bir kez yakaladın mı?

Sadece System.Exception yakalamak için önerilmez. Bunun yerine, sadece "bilinen" özel durum yakalandı.

Şimdi, Bu bazen, örneğin: tekrarlanan kod gereksiz yol açar

try
{
    WebId = new Guid(queryString["web"]);
}
catch (FormatException)
{
    WebId = Guid.Empty;
}
catch (OverflowException)
{
    WebId = Guid.Empty;
}

Merak ediyorum: bir iki istisna yakalamak ve sadece WebId = Guid.Empty aramak için bir kez?

Düzenleme:Verilen örnek sadece GUID gibi oldukça basittir. Ama düşünün bir nesneyi birden çok kez değiştirin ve eğer manipülasyonlar biri beklenen bir şekilde başarısız olursa, "nesne. sıfırlamak istediğiniz kodu Eğer beklenmedik bir durum varsa ancak, ben hala daha atmak istiyorum.

Cevap:Herkese teşekkürler! Nedense GetType() anahtarlama desteği switch-case bir deyim var kafamda planlamıştım. Şimdi, iki cevap vardı, birini kullanarak "typeof" kullanarak "is". Ben ilk düşündüğüm için typeof() benim görevim olacağını düşündüm, "Hey, ben sadece beklediğim tek şey bu çünkü FormatException yakalamak istiyorum". Ama bu böyle değil catch() çalışır: tüm yakalar da türetilmiş özel durumları yakalamak. Bunu düşündükten sonra, bu çok açıktır: Yoksa catch(Exception ex) işe yaramaz! Doğru cevap "is". Evet, tek bir soru \o/ ile iki şey öğrendim

CEVAP
25 EYLÜL 2008, PERŞEMBE


System.Exception yakalamak ve türlerini açın

catch (Exception ex)            
{                
    if (ex is FormatException || ex is OverflowException)
    {
        WebId = Guid.Empty;
        return;
    }

    throw;
}

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • guau . .

    guau . .

    25 Ocak 2008
  • Rootjunky.com

    Rootjunky.co

    22 EKİM 2011
  • Trulia

    Trulia

    29 Kasım 2006