我有点迷失在延期执行的土地上:
我声明了一个 IEnumerable 实现类的实例
var wordEnumerable = new WordEnumerable(_text);
然后我迭代它(第一个词是“Lorem”)
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,它允许我遍历给定字符串中的单词。