Best Practice bezüglich der Rückgabe von Blöcken [duplizieren]

8

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?

zurückgeben %Vor%

oder

%Vor%     
abatishchev 03.08.2009, 18:24
quelle

7 Antworten

9

Ich bevorzuge das erste Beispiel. Weniger Variablen, weniger Codezeilen, einfacher zu verwalten, einfacher zu verwalten ...

%Vor%     
Scott Ivey 03.08.2009, 18:27
quelle
5

Nach dem Prinzip "weniger ist mehr" (wirklich nur eine Variante von KISS ), ersteres. Es gibt weniger zu wartende Codezeilen, keine Änderung der Semantik und keinen Verlust der Lesbarkeit (dieser Stil ist leichter lesbar).

    
jason 03.08.2009 18:29
quelle
5

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.

    
Stan R. 03.08.2009 18:29
quelle
3

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:

%Vor%

Der Fehler dort ist, dass Sie nicht FileStream entsorgen. Also musst du schreiben (ähnlich deinem Beispiel):

%Vor%

Aber mit einer einfachen Erweiterungsmethode , Sie können dies stattdessen schreiben:

%Vor%

Schön und ordentlich, und die FileStream wird richtig entsorgt.

    
Daniel Earwicker 03.08.2009 18:36
quelle
2

Es gibt keinen Grund dazu, da die using -Anweisung in einen try...finally -Block übersetzt wird und der finally -Teil garantiert ausgeführt wird (selbst durch eine Rückgabe oder eine unbehandelte Ausnahme).

    
Blindy 03.08.2009 18:27
quelle
1

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.

    
Michael Petrotta 03.08.2009 18:28
quelle
1

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

    
Raghav 05.08.2009 15:14
quelle