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

  • BroadCity

    BroadCity

    10 ŞUBAT 2010
  • DroidModderX ROOT Master

    DroidModderX

    14 ŞUBAT 2011
  • ::..ηєѕѕ мιχ..::

    ::..ηєѕѕ

    15 Aralık 2006