La réutilisation d'un ienuable entraîne un faux résultat, par exemple sur .Any ()
-
30-10-2019 - |
Question
Je suis un peu perdu dans les terres d'exécution différée:
Je déclare une instance d'une classe d'implémentation ienuable
var wordEnumerable = new WordEnumerable(_text);
Ensuite, je l'itère dessus (le premier mot est "Lorem")
foreach (var word in wordEnumerable)
Console.WriteLine(word);
.. qui est écrit sur la console.
Maintenant, juste par la suite dans le code, je fais un
Console.WriteLine(wordEnumerable.Any(w => w == "Lorem"));
.. et obtenez une fausse sortie en tant que sortie.
Maintenant, si je mets la partie .y (..) au-dessus de la boucle foreach, j'obtiens une vraie, mais la boucle commence par le deuxième mot.
Mon attente Est-ce que .NET a créé différents «contextes» d'exécution pour chaque appel à un iennumable et son ienumerateur sous-jacent afin qu'ils n'interfèrent pas ... Je ne voudrais pas. Reset () à la main pour obtenir un résultat approprié?
Qu'est-ce que j'oublie ici?
Mise à jour:
- Lien vers une implémentation ienumable: https://gist.github.com/814352
- Lien vers Ienumerator Implémentation: https://gist.github.com/814354
- .. et enfin l'implémentation de l'analyseur de texte sous-jacent: https://gist.github.com/814358
.. C'est essentiellement un ienuable qui me permet d'itérer sur les mots dans une chaîne donnée.
Pas de solution correcte