2010-11-15 13 views

Antwort

4

Ich würde vorschlagen, einen Blick auf die TryParse Methoden auf die eingebauten Typen wie Int. Der Rückgabewert ist ein Bool, um den Erfolg anzuzeigen, während der Wert über einen out-Parameter zurückgegeben wird. Dieses Konstrukt macht es nützlich, diese Methode in einem Schleifenkonstrukt aufzurufen, wo ein anderer Rückgabetyp es etwas komplizierter machen würde.

Bei weiterem Nachdenken könnte eine Konsequenz eine Tendenz sein, einfach nur Parameter zu einer Methode hinzuzufügen, anstatt die Logik richtig einzukapseln.

+0

wollen wissen, warum die boolesche Rückkehr in der Schleife gut ist? Kannst du ein Beispiel geben? – user496949

+0

@ user496949 - Mit den TryParse-Methoden können Sie einen Fehler beim Parsen ziemlich einfach behandeln, indem Sie sich die Rückgabe der Methode ansehen. Das verhindert, dass Sie versuchen, entweder die Parsing-Exception zu behandeln oder nach etwas zu suchen, das anzeigt, dass der resultierende Wert irgendwie ungültig ist. Betrachten Sie einen Booleschen als wahrscheinlich das einfachste Beispiel. Wie würde man außer einer Ausnahme wissen, dass ein resultierender Wert "ungültig" war? Mit tryParse gibt die Methode selbst den Erfolg an, und der resultierende Wert wurde entweder korrekt zu einem neuen Wert analysiert oder bleibt so wie er vor dem Aufruf der Methode war. – Steven

+0

Ich denke, Sie haben den größten Nachteil. Von dem, was ich sagen kann, jeder out param. erfordert die Pflege einer anderen Variablen durch das Objekt, das die Methode aufruft. Es ist nicht "eine große Sache", ein paar zusätzliche Variablen auf dem Weg zu delcare, aber es hat ein großes Potenzial, unnötig schwerfällig zu werden, wenn die Methode genauso einfach (und wahrscheinlich besser) alle diese Informationen in kapseln kann sein zurückgegebener Wert. – Steven

0

Wie Sie gesagt haben, ohne out-Parameter, können Sie nur einen Wert zurückgeben kann, aus Schlüsselwort erlauben Sie „Rückkehr“ mehr als einen Wert

0

In C# Sie nicht mehrere Variablen zurückkehren können, so dass Sie den Job tun könnte Verwenden Sie den out-Parameter, wenn Sie nicht durch eine Klasse gehen möchten (geben Sie eine Klasse mit diesen mehreren Variablen zurück).

6

Mit Out-Parametern können Sie effektiv mehrere Werte aus einer Methode zurückgeben, und dies ist im Allgemeinen vorzuziehen, wenn Sie eine beliebige Struktur oder ein Tupel mit mehreren Werten zurückgeben.

Man könnte argumentieren, dass es leichter ist, die möglichen Nebenwirkungen einer Funktion zu übersehen, die einen out-Parameter verwendet, da sie vom traditionellen Modell mit mehreren Parametern und einem Rückgabewert abweicht. Aber ich bin ehrlich der Meinung, dass das out-Schlüsselwort in Verbindung mit einer Methode post-condition die Absicht des Programmierers deutlich macht.

+1

Ich bin mir nicht sicher, ob ich der Ansicht zustimme, dass es im Allgemeinen vorzuziehen ist, "out" -Werte anstelle von Rückgabeobjekten zu haben, aber vielleicht liegt es daran, dass ich willkürlich nicht beliebig interpretiere. Für mich bietet eine Sammlung von Rückgabewerten (Eigenschaften in einem einzelnen Rückgabeobjekt) im Allgemeinen mehr Flexibilität als eine Liste von Variablen, die deklariert und gepflegt werden müssen, aber ich stimme zu, dass es in beiden Situationen gute Fälle gibt. Sie scheinen einen perfekten Sinn in TryParse-Typ-Methoden zu machen, wo, ich stimme zu, eine "spezielle" Struktur von + bool (Erfolg?) Scheint Overkill. – Steven

Verwandte Themen