Versuchen Sie, jede Codezeile ohne einzelne try-catch-Blöcke zu fangen

c# expression-trees try-catch

Frage

Ich habe dieses Problem derzeit nicht , aber Sie wissen nie, und Gedankenexperimente machen immer Spaß.

Ignorieren Sie die offensichtlichen Probleme, die Sie mit Ihrer Architektur haben müssten, um dies auch nur zu versuchen , nehmen wir an, dass Sie einen schrecklich geschriebenen Code für den Entwurf eines anderen hatten, und Sie mussten eine ganze Reihe verschiedener Operationen im selben Code ausführen blockieren, zB:

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

Mit hundert multipliziert. Einige davon könnten funktionieren, andere könnten schief gehen. Was Sie brauchen, ist das C # -Äquivalent von "bei Fehler resume next", sonst werden Sie am Ende Kopieren und Einfügen von Try-Fails rund um die vielen Codezeilen.

Wie würden Sie versuchen, dieses Problem anzugehen?

Akzeptierte Antwort

Es ist ziemlich offensichtlich, dass Sie den Code in VB.NET schreiben würden, der tatsächlich On Error Resume Next hat , und in einer DLL nach C # exportieren. Alles andere ist nur ein Vielfraß für Bestrafung.


Beliebte Antwort

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 );



Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum