144 Stimmen

Ist es schlechte Praxis, aus einem try catch finally-Block zurückzukehren?

Heute Morgen bin ich auf einen Code gestoßen, der wie folgt aussah:

try
{
    x = SomeThingDangerous();
    return x;
}
catch (Exception ex)
{
    throw new DangerousException(ex);
}
finally
{
    CleanUpDangerousStuff();
}

Nun kompiliert dieser Code gut und funktioniert, wie es sollte, aber es fühlt sich einfach nicht richtig, um aus einem Try-Block zurückkehren, vor allem, wenn es eine zugeordnete finally.

Mein Hauptproblem ist, was passiert, wenn die schließlich eine Ausnahme von ihm selbst auslöst? Sie haben eine zurückgegebene Variable, aber auch eine Ausnahme, mit der Sie umgehen müssen... daher interessiert es mich, was andere über die Rückgabe aus einem Try-Block denken?

3voto

BeWarned Punkte 2252

In Ihrem Beispiel sind beide Möglichkeiten gleichwertig, und es würde mich nicht einmal wundern, wenn der Compiler denselben Code erzeugt. Wenn eine Ausnahme im finally-Block auftritt, haben Sie die gleichen Probleme, egal ob Sie die return-Anweisung in den Block oder außerhalb davon setzen.

Die eigentliche Frage ist, was stilistisch am besten ist. Ich schreibe meine Methoden gerne so, dass es nur eine Rückgabeanweisung gibt. Auf diese Weise ist es einfacher, den Ablauf der Methode zu sehen, und daraus folgt, dass ich die Rückgabeanweisung auch gerne an den Schluss stelle, damit leicht zu erkennen ist, dass sie das Ende der Methode ist und was sie zurückgibt.

Ich denke, wenn die Return-Anweisung so sauber als letzte Anweisung platziert ist, ist es weniger wahrscheinlich, dass andere kommen und mehrere Return-Anweisungen in andere Teile der Methode einstreuen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X