Я немного потерялся в земле отсроченного исполнения:
Я объявляю экземпляр класса реализации IEnumerable
var wordEnumerable = new WordEnumerable(_text);
Затем я перебираю его (первое слово «Лорем»)
foreach (var word in wordEnumerable)
Console.WriteLine(word);
.. который пишется в консоли.
Теперь сразу после этого в коде я делаю
Console.WriteLine(wordEnumerable.Any(w => w == "Lorem"));
.. и получить False в качестве вывода.
Теперь, если я помещу часть .Any(..) над циклом foreach, я получу истину, однако цикл начнется со второго слова.
Мое ожидание заключалось в том, что .Net создает разные «контексты» времени выполнения для каждого вызова IEnumerable и его базового IEnumerator, чтобы они не мешали... Я бы не хотел .Reset() с помощью рукой, чтобы получить надлежащий результат?
Что мне здесь не хватает?
Обновление:
- Ссылка на реализацию IEnumerable: https://gist.github.com/814352
- Ссылка на реализацию IEnumerator: https://gist.github.com/814354
- .. и, наконец, базовая реализация парсера текста: https://gist.github.com/814358
.. По сути, это IEnumerable, который позволяет мне перебирать слова в заданной строке.
WordEnumerable
реализуетIEnumerable<T>
? - person Daniel A. White   schedule 07.02.2011List<string>
. И если коллекция не менялась между обоими фрагментами кода, то ваш код тоже должен работать, если класс WordEnumerable работает как положено. - person Jarek   schedule 07.02.2011