J'ai une vague compréhension du mot-clé yield
dans c#, mais je n'ai pas encore vu le besoin de l'utiliser dans mon code. Cela vient probablement d'un manque de compréhension de celui-ci. Donc, quelles sont les bonnes utilisations typiques de yield
?Utilisation du rendement en C#
Répondre
yield
rend très simple la mise en œuvre d'un énumérateur. Donc, si vous voulez écrire une méthode qui retourne un IEnumerable<T>
cela vous évite d'avoir à créer la classe de l'énumérateur - vous avez juste un résultat à la fois et le compilateur s'occupe des détails sous les couvertures.
Un cas pratique consiste à écrire un «énumérateur infini» que l'appelant peut appeler autant de fois qu'il le faut. Voici un exemple qui génère une série infinie de nombres Fibonacci: http://chrisfulstow.com/fibonacci-numbers-iterator-with-csharp-yield-statements/ (bien ... théoriquement infini, mais en pratique limitée à la taille de UInt64).
Le rendement implémente le modèle de chargement paresseux. Je suggère de considérer son utilité dans cette perspective.
Par exemple. Dans le contexte des logiciels d'entreprise sur lesquels je travaille, cela pourrait présenter l'avantage de réduire la charge sur la base de données. Vous écrivez du code qui extrait une variété de données de la base de données, mais seule cette partie sera chargée, ce qui est vraiment nécessaire pour un scénario particulier. Si un utilisateur ne va pas plus loin dans l'interface utilisateur, les données respectives ne seront pas chargées.
C'était un exemple vraiment utile qui démontre que vous avez une longue liste qui pourrait ne pas être utilisée complètement. – maulik13
Le rendement est utilisé dans les enquêteurs. Le compilateur C# suspend automatiquement l'exécution de votre boucle d'énumération et renvoie la valeur actuelle à l'appelant.
IEnumerable<int> GetIntegers(int max) {
for(int i = 1; i <= max) {
yield return i; // Return current value to the caller
}
}
- ou (plus maladroits) -
IEnumerable<int> GetIntegers(int max) {
int count = 0;
while(true) {
if(count >= max) yield break; // Terminate enumeration
count++;
yield return count; // Return current value to the caller
}
}
Plus de détails sur MSDN.
également très bon dans les tests et se moquant quand vous voulez juste tester un IEnumerable <> rapidement, quelque chose comme ...
yield return somevalue;
yield return someothervalue;
yield return yetanotherone;
- 1. Implémentation du rendement (rendement) en utilisant les suites de Scala
- 2. application Mesure du rendement
- 3. utilisation intéressante du mot-clé C# rendement dans le tutoriel dîner Nerd
- 4. Différence entre le rendement en Python et le rendement en C#
- 5. Utilisation du code C++ en C#
- 6. Utilisation du cryptage AES en C#
- 7. Utilisation du curseur personnalisé en C#
- 8. Utilisation du bouton de fermeture en C#
- 9. Utilisation du pointeur "This" en C++
- 10. Utilisation du dictionnaire dynamique en C#
- 11. Conversion de retour de rendement C# en VB .NET
- 12. mise en œuvre Scala de rendement C# -comme avec « pour »
- 13. Calcul du rendement en pourcentage moyen (APY) avec T-SQL
- 14. Utilisation du modèle C++
- 15. Quelles sont les applications réelles du rendement?
- 16. Recursion rendement
- 17. Utilisation du rendement return pour renvoyer des objets qui héritent d'un type de base
- 18. Rendement de C# à C++, traitant des conteneurs
- 19. Utilisation du type passé en tant que modèle en C++
- 20. Utilisation du code C dans C#
- 21. F # rendement efficace?
- 22. Utilisation d'enums en C?
- 23. Utilisation de StatusStrip en C#
- 24. Réécrivez ceci pour chaque rendement à un rendement linq?
- 25. Mauvais rendement total?
- 26. Est-ce que Scala a un rendement C# équivalent?
- 27. Le rendement C++/CLI peut-il être atteint?
- 28. Utilisation de la mémoire du processus en cours dans C
- 29. Utilisation du mode C++ 0x de GCC en production?
- 30. Utilisation du utilisant le mot clé en C#
Essayez cette première: http://stackoverflow.com/search?q= rendement + c% 23, la première page de résultats a au moins 5 questions qui devraient vous aider. – Benjol
Oh, merci! Beaucoup de choses utiles là-bas! – Steve
duplicata possible de http://stackoverflow.com/questions/39476/what-is-the-yield-keyword-used-in-c –