Évaluation Différée/Exécution Différée
Le "taux de retour" itérateur blocs ne s'exécute tout le code jusqu'à ce que vous fait appel pour que des résultats précis. Cela signifie qu'ils peuvent aussi être liés ensemble de manière efficace. Pop quiz: en supposant que le "ReadLines()" fonction lit toutes les lignes d'un fichier texte et est mis en œuvre à l'aide d'un itérateur bloc, combien de fois le code suivant itérer sur le fichier?
var query = ReadLines(@"C:\MyFile.txt")
.Where(l => l.Contains("search text") )
.Select(l => int.Parse(l.SubStrin(5,8))
.Where(i => i > 10 );
int sum=0;
foreach (int value in query)
{
sum += value;
}
La réponse est exactement un, et que pas jusqu'en bas dans l' foreach
boucle.
La séparation des Préoccupations
De nouveau à l'aide de l'hypothétique ReadLines()
fonction à partir de ci-dessus, nous pouvons maintenant facilement séparer le code qui lit le fichier à partir du code qui filtre de l'onu-les lignes de code qui fait l'analyse des résultats. Le fait que la première, en particulier, est très ré-utilisable.
Infini Listes
Voir ma réponse à cette question pour un bon exemple:
http://stackoverflow.com/questions/1076001/need-help-with-c-fibonacci
Fondamentalement, je mets en œuvre la séquence de fibonacci à l'aide d'un itérateur bloc qui ne sera jamais s'arrêter (du moins, pas avant d'atteindre l'exemple maxint), et ensuite utiliser que la mise en œuvre de façon sécuritaire.