2016-06-04 6 views
0

Ich weiß, was Rendite ist, aber ich kann nicht verstehen, warum sollte ich es verwenden, ist es nur, weil es mir eine Zeile einer Liste Erklärung speichert?Wo wird die Rendite in C# bevorzugt?

Es muss etwas mehr sein.

Was ist es und wo ist es am besten, es zu benutzen?

* Ich fragte wo und warum es zu verwenden, was seine Vorteile und nicht was ist es.

+0

Die Verwendung der Ausbeute in einer Methode macht es zu einem Iterator - ich glaube nicht, dass es in der Sprache andere Verwendung hat – Charleh

+0

Vielen Dank für die Korrekturen. –

Antwort

6

es gerade ist erzeugt, weil es mir eine Zeile einer Liste Erklärung speichert?

Nein. Wenn Sie yield verwenden, erhalten Sie die verzögerte Ausführung. Dies bedeutet, dass Sie die Artikel erstellen, die ausgegeben werden sollen, wenn der Verbraucher die Artikel konsumiert.

Wenn Sie Elemente zur Liste hinzufügen und sie dann zurückgeben, müssen Sie alle Elemente erstellen, bevor der Konsument sie verwenden kann.

zum Beispiel angenommen, dass der Verbraucher Ihre Methode aufruft und verwendet eine for-Schleife es so zu verbrauchen:

foreach(var item in GetMyLovelyItems()) 
{ 
    ... 
} 

Wenn die GetMyLovelyItems eine Liste zurückgibt, dann werden alle Einzelteile, bevor die GetMyLovelyItems Methode zurückgibt, erstellt werden und die Schleife beginnt.

Wenn Sie auf der anderen Seite yield verwenden, um Elemente zurückzugeben, werden die Elemente erstellt, wenn die Schleife von einer Iteration zur nächsten übergeht.

+0

Ahhh jetzt bekomme ich die Vorteile dieser Operation, danke! –

+0

Gern geschehen. –

2

Es ist für diese komplizierten Fälle, wo Sie nicht mit einem Array, einer Liste oder Enumerable.* Methoden fällig werden können. Diese Funktion wird nur selten benötigt.

Das am häufigsten verwendete Verwendungsmuster ist die Ausgabe von Elementen in einer Art Schleife, die nicht mit den Methoden Enumerable.* ausgedrückt werden können.

Viele Enumerable Methoden werden mit yield implementiert.

yieldist für die verzögerte Ausführung nicht erforderlich. Enumerable wird ebenfalls zurückgestellt.

In jedem Fall können Sie Ihre eigene IEnumerable abgeleitete Klasse schreiben. Dies ist die ausdrucksvollste und mühsamste Art, eine Sequenz zu erzeugen.

2

Es kann möglicherweise auch mit verzögerter/DEFFERED Ausführung des Codes gekoppelt werden, um die Ausbeute

Verwandte Themen