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

  • newreleaseblitz

    newreleasebl

    13 Ocak 2010
  • POGProductionz

    POGProductio

    27 NİSAN 2012
  • RD

    RD

    19 NİSAN 2006