<p>J’ai tendance à utiliser <code>yield return</code> lorsque je calcule l’élément suivant dans la liste (ou même le groupe suivant d’éléments).</p>
<p>En utilisant votre Version 2, vous devez avoir la liste complète avant de la retourner.<br>
En utilisant <code>yield return</code>, vous n’avez vraiment besoin que de l’élément suivant avant de le retourner.</p>
<p>Entre autres choses, cela aide à répartir le coût computationnel des calculs complexes sur une période plus longue. Par exemple, si la liste est connectée à une interface graphique et que l’utilisateur ne va jamais à la dernière page, vous ne calculez jamais les derniers éléments de la liste.</p>
<p>Un autre cas où <code>yield return</code> est préférable est si l’<code>IEnumerable</code> représente un ensemble infini. Considérez la liste des nombres premiers, ou une liste infinie de nombres aléatoires. Vous ne pouvez jamais retourner l’<code>IEnumerable</code> complet d’un coup, donc vous utilisez <code>yield return</code> pour retourner la liste de manière incrémentale.</p>
<p>Dans votre exemple particulier, vous avez la liste complète des produits, donc j’utiliserais la Version 2.</p>