Duplicaté possible: strong>
C # - Utilisation correcte du rendement de rendement P> blockQuote>Qu'est-ce qui peut être un cas d'utilisation réel pour le rendement C #? P>
merci. p>
4 Réponses :
Lorsque vous voulez Exécution différée .
Cela a du sens Dans la plupart des cas où l'alternative consiste à construire une collection temporaire. P>
Considérez ce scénario: j'ai une liste d'entiers et je souhaite énumérer leurs carrés. P>
Je pourrais faire ceci: p> puis je pourrais résumer les carrés, prendre leur moyenne, trouver le plus grand, etc. p> mais je n'ai vraiment pas besoin de peupler un tout Nouvelle liste le fait que cela fait réellement Une différence peut ne pas être apparente avant de commencer à traiter avec de très grandes collections, où peupler des collections temporaires s'avère assez gaspillée. P> Par exemple supposez que je voulais trouver le premier carré au-dessus d'un certain seuil. Je pourrais faire cela: p> mais si mes
produire code> pour énumérer sur la liste initiale et renvoyer les carrés un-par-un: p>
carrés code> ont rempli une liste de
complète
Exemple bien écrit. + 1 pour pourquoi la différence pourrait ne pas être apparente.
du page MSDN sur rendement Code>
:
Utilisé dans un bloc d'itérateur pour fournir une valeur à l'objet de l'énumérateur ou pour signaler la fin de l'itération. P> BlockQuote>
Vous l'utilisez lors de la création d'un itérateur personnalisé. Utilisation de l'exemple de la page: p>
xxx pré> le rendement
code> signifie que le
tandis que code> boucle à l'intérieur
POWER Code> efficacement "pause" après chaque itération pour permettre à la routine d'appel d'effectuer une action. Dans ce cas, imprimez le résultat. P> p>
Lorsque vous êtes trop paresseux pour écrire votre propre ienumerator ;) p>
+1 Je pense que je suis toujours trop paresseux ...
Et il convient probablement de noter qu'il y a une différence entre ienumerator et iénumérable, les mots sont épelés assez de la même manière que j'avais l'habitude d'être confus parce que je lisais des définitions différentes pour ce que je pensais être la même chose
@ Davy8 très vrai! Beaucoup de gens sont confondus par la différence. L'ienumerator contient tout le rendement caché de la logique. L'iEnumerable fournirait simplement un accès à l'ienumerator.
L'ienumerator peut-il remplacer la fonctionnalité de rendement?
@Newb Ecrire vos propres classes iénumérables et Ienumerator est le moyen "manuel" de créer votre propre logique d'énumération complexe, comme une exécution différée, des projections, un filtrage, etc. Le compilateur nous donne simplement un "raccourci" rapide en utilisant le rendement. Ce n'est pas aussi puissant, mais juste un mot clé au lieu d'une classe entière, donc pour des cas simples, il est plus rapide et plus facile.
Voulez-vous dire que Yiels est une implémentation de compilateur d'interfaces Ienumer * dans les coulisses? Ou que les deux sont traduits de la même manière par le compilateur? En outre, voir la réponse de Dan Tao ci-dessous - il utilise le rendement en plus de iEnumerable.
@Newb et c'est ce que je veux dire par la confusion entre ienumerator et iénumérable. Une iénumérable est ce que les gens travaillent habituellement, c'est une collection de commandes de valeur pouvant potentiellement être infinie de longueur en utilisant un ienumerator. L'ienumerator est ce qui indique à un look pour obtenir la valeur suivante dans l'Ineumable spécifié
@Newb Dan Tao La réponse renvoie un iéenérable, il n'a pas écrit sa propre classe iénumérable. C'est la différence - vous pouvez retourner un iNeumable avec un rendement ou écrire votre propre classe iEnumerable et retourner cela.
Justin Etheredge l'explique vraiment bien dans la série Tekpub Mastering Linq. Tekpub.com/preview/LINQ