Prova a catturare ogni riga di codice senza blocchi try-catch individuali

c# expression-trees try-catch

Domanda

Al momento non ho questo problema , ma non lo sai mai, e ho pensato che gli esperimenti sono sempre divertenti.

Ignorando gli ovvi problemi che dovresti avere con la tua architettura per tentare anche questo , supponiamo che tu avessi un codice scritto in modo orribile del design di qualcun altro, e dovevi fare un sacco di operazioni vaste e varie nello stesso codice blocco, ad esempio:

WidgetMaker.SetAlignment(57);
contactForm["Title"] = txtTitle.Text;
Casserole.Season(true, false);
((RecordKeeper)Session["CasseroleTracker"]).Seasoned = true;

Moltiplicato per cento. Alcuni di questi potrebbero funzionare, altri potrebbero andare male. Quello di cui hai bisogno è l'equivalente in C # di "su errore riprendi dopo", altrimenti finirai per copiare e incollare tentativi di cattura attorno alle molte linee di codice.

Come tenteresti di affrontare questo problema?

Risposta accettata

È abbastanza ovvio che tu scriveresti il ​​codice in VB.NET, che in realtà ha On Error Resume Next , ed esporta in una DLL in C #. Qualcos'altro è solo un ghiottone per punizione.


Risposta popolare

public delegate void VoidDelegate();

public static class Utils
{
  public static void Try(VoidDelegate v) {
    try {
      v();
    }
    catch {}
  }
}

Utils.Try( () => WidgetMaker.SetAlignment(57) );
Utils.Try( () => contactForm["Title"] = txtTitle.Text );
Utils.Try( () => Casserole.Season(true, false) );
Utils.Try( () => ((RecordKeeper)Session["CasseroleTracker"]).Seasoned = true );


Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché