2010-07-07 17 views

risposta

11

Il rendimento restituito crea automaticamente un enumeratore.

http://msdn.microsoft.com/en-us/library/9k7k7cf0.aspx

Così si può fare qualcosa di simile

//pseudo code: 

while(get_next_record_from_database) 
{ 
    yield return your_next_record; 
} 

Esso consente di creare rapidamente una collezione oggetto (un Enumerator), che è possibile scorrere e recuperare i record. L'istruzione return return gestisce tutto il codice necessario per creare un enumeratore per te.

La parte importante dell'istruzione return return è che non è necessario caricare tutti gli elementi di una raccolta prima di restituire la raccolta al metodo di chiamata. Permette di lazy loading della raccolta, quindi non si paga la penalità di accesso tutto in una volta.

Quando utilizzare Yield Return.

1

yield viene utilizzato come zucchero sintattico per restituire un oggetto IEnumerable<T> o IEnumerator<T> da un metodo senza dover implementare la propria classe implementando queste interfacce.

+0

?? Perché i downvotes? Sono errato? – spoulson

+0

Sì, perché è diverso dalla creazione dell'IEnumerable e dalla sua restituzione. –

+2

Non c'è niente di sbagliato in questa risposta. –

4

Rendimento è molto più che zucchero sintetico o semplici modi per creare oggetti enumerabili.

Per ulteriori informazioni, vorrei controllare il blog di Justin Etherage che has a great article explaining more advanced usages of yield.

+0

Assolutamente. Non puoi apprezzare appieno la "resa" finché non capisci esattamente come sta creando la macchina di stato per te. È incredibilmente potente. –

+0

Accidenti questo è utile. So che è vecchio ma quel post lo ha fatto davvero per me. – Terrance

1

Ho scritto un semplice esempio che mostra come il blocco di rendimento viene richiamato durante un ciclo di visita della raccolta. Dai un'occhiata allo here.