SORU
17 EKİM 2011, PAZARTESİ


İç içe geçmiş try blokları önlemek için desen?

Her bir istisna ile başarısız olabilir üç (veya daha fazla) bir hesaplama gerçekleştirme yolu var bir durum, düşünün. Başarılı bir ev bulana kadar her hesaplama girişimi için şunları yapıyorum:

double val;

try { val = calc1(); }
catch (Calc1Exception e1)
{ 
    try { val = calc2(); }
    catch (Calc2Exception e2)
    {
        try { val = calc3(); }
        catch (Calc3Exception e3)
        {
            throw new NoCalcsWorkedException();
        }
    }
}

Daha güzel bir şekilde bu elde kabul edilen herhangi bir desen var mı? Elbette gönderebilirim wrap her hesaplamada bir yardımcı yöntem döndürür null hatası, ve sadece ?? operatör, ama bir şekilde bunu yaparak daha genel olarak (yani zorunda kalmadan yazmak için bir yardımcı yöntem için her yöntemi kullanmak istiyorum)? Statik bir yöntem deneyin/catch herhangi bir yöntem sarar ve null hatası verir jenerik kullanarak yazma hakkında düşündüm, ama bu konuda gitmek nasıl emin değilim. Herhangi bir fikir?

CEVAP
17 EKİM 2011, PAZARTESİ


Mümkün olduğunca denetim akışı veya sıradan durumlar için istisnalar kullanmayın.

Ama doğrudan cevap (özel durum türleri aynı olduğundan tüm varsayarsak):

Func<double>[] calcs = { calc1, calc2, calc3 };

foreach(var calc in calcs)
{
   try { return calc(); }
   catch (CalcException){  }
} 

throw new NoCalcsWorkedException();

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • 07cadikiz07

    07cadikiz07

    17 EKİM 2007
  • Djbasilio AuToBaSs

    Djbasilio Au

    20 Aralık 2008
  • Vagrant Records

    Vagrant Reco

    8 Mayıs 2006