Welcher Weg ist besser: einen Wert aus einer Methode innerhalb einer using
-Anweisung zurückgeben oder eine Variable vorher deklarieren, sie innerhalb setzen und nach?
oder
%Vor%Ich bevorzuge das erste Beispiel. Weniger Variablen, weniger Codezeilen, einfacher zu verwalten, einfacher zu verwalten ...
%Vor%Von Verwendung von Statement - MSDN
Die using-Anweisung stellt dies sicher Dispose wird auch bei einer Ausnahme aufgerufen tritt auf, während Sie Methoden aufrufen auf dem Objekt. Sie können das erreichen dasselbe Ergebnis, indem das Objekt gesetzt wird in einem Versuch Block und dann anzurufen Dispose in einem finally-Block; eigentlich, So ist die using-Anweisung übersetzt vom Compiler.
Von der try-finally (C # -Referenz)
wird schließlich verwendet, um a zu garantieren Anweisungsblock des Codes wird ausgeführt unabhängig davon, wie der vorhergehende try-Block verlassen wurde.
Um Ihre Frage zu beantworten, ist es in Ordnung, von einer using-Anweisung zurückzukommen.
Der zweite ist deutlich besser, und Sie können überprüfen, ob es funktioniert, indem Sie ein Testprogramm schreiben.
Die using
Anweisung selbst kann keinen Wert haben, was eine Einschränkung darstellt. Angenommen, Sie haben eine Methode namens Open
, die eine offene FileStream
zurückgibt, und Sie möchten die Länge der Datei erhalten:
Der Fehler dort ist, dass Sie nicht FileStream
entsorgen. Also musst du schreiben (ähnlich deinem Beispiel):
Aber mit einer einfachen Erweiterungsmethode , Sie können dies stattdessen schreiben:
%Vor% Schön und ordentlich, und die FileStream
wird richtig entsorgt.
Es kommt wirklich auf persönliche Vorlieben an. Sie werden auf beiden Seiten dieses Zauns Argumente finden. Ich bevorzuge Option 1: so schnell wie möglich zurückzukehren. Ich glaube, es drückt die Absicht des Codes besser aus; Es gibt keinen Grund länger zu bleiben als nötig. Wenn Sie alle Ihre Arbeit abgeschlossen haben, kehren Sie zurück.
Manchmal haben Sie mehrere mögliche Rückgabepunkte und "Ende der Methode" (Protokollierung, Bereinigung), die Sie zu einer einzelnen Rückgabeanweisung führen könnten. Nichts Schreckliches daran, aber Sie können diese Situationen oft in finally
Blöcken oder mit Aspekten in der aspektorientierten Programmierung behandeln.
Ich fühle mich zweitens besser
%Vor%Eine Sache, die uns bei der Verwendung dieses Weges in den Sinn kommt, ist, dass wir zwischen dem Gebrauch zurückkehren, so dass das Objekt (in das wir uns eingewickelt haben) entsorgt wird, die Antwort ist ja Weil eine using-Anweisung nur die Mischung aus try / finally-Block ist, ist es in Ordnung, auch von einem try-Block zurückzukommen. Der return-Ausdruck wird ausgewertet, dann wird der finally-Block ausgeführt, und die Methode kehrt dann zurück :)
Tags und Links c# coding-style using-statement