puoi aiutarmi a comprendere la parola chiave yield
in asp.net(C#)
.Che cos'è la resa ?, e qual è il vantaggio di utilizzare la resa in asp.net?
risposta
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.
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.
yield
consente di emettere un oggetto IEnumerable in cui normalmente si restituisce un tipo più concreto (come un IList).
This is a pretty good example of how it can simplify your code and clarify your intent. Per quanto riguarda il punto in cui lo si utilizza, in qualsiasi punto delle pagine che è necessario ripetere su una raccolta, è possibile utilizzare un metodo che restituisce un oggetto IEnumerable al posto di un elenco/dizionario/ecc.
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.
Assolutamente. Non puoi apprezzare appieno la "resa" finché non capisci esattamente come sta creando la macchina di stato per te. È incredibilmente potente. –
Accidenti questo è utile. So che è vecchio ma quel post lo ha fatto davvero per me. – Terrance
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.
- 1. Qual è la resa di Scala?
- 2. In che modo la resa è enumerabile?
- 3. Dove usare meglio la resa in Python?
- 4. resa condizionale in JSF
- 5. resa Implementazione in C
- 6. E 'la resa' in Scala equivalente alla funzione mappa?
- 7. Come gestire più segnalazioni prima che la risposta sia resa?
- 8. Resa in C#
- 9. Qual è la differenza di resa tra un intervallo e un tag etichetta?
- 10. content_for vs resa in parziali
- 11. Ricorsione con resa
- 12. Differenza tra `resa da foo()` e `for x in foo(): resa x`
- 13. Mappa di Lodash e resa unica
- 14. Python: assegnazione di resa e rendimento
- 15. Resa in una funzione ricorsiva
- 16. Misunderstood pitone resa
- 17. In che modo la resa implementa il modello di caricamento lento?
- 18. Modifica resa dal valore di ritorno di
- 19. è stata definita ma non resa per la pagina di layout "~/Views/Shared/_Layout.cshtml": "head"
- 20. C n. Resa in metodo nidificato
- 21. Resa in vista per più blocchi
- 22. resa in list comprehension e generatore di espressioni
- 23. Prestazioni di resa annidata su un albero
- 24. Ritorno e raccolta iterabile con resa in scala
- 25. Resa multipla nel modello di applicazione Meteor.js
- 26. Python asyncio: la resa da non è stata utilizzata con il futuro?
- 27. Determina quale vista verrà resa in @RenderBody()
- 28. In che modo Ruby on Rails utilizza la resa per i layout?
- 29. Non riesco a capire come utilizzare la resa con richiesta asincrona
- 30. enumerazioni 'resa' che non vengono 'finito' dal chiamante - cosa succede
?? Perché i downvotes? Sono errato? – spoulson
Sì, perché è diverso dalla creazione dell'IEnumerable e dalla sua restituzione. –
Non c'è niente di sbagliato in questa risposta. –