我在延期执行的土地上有点迷失:
我声明了一个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的每次调用创建了不同的运行时'contexts',因此它们不会干扰...我不想.Reset( )为了得到正确的结果,手工制作?
我在这里缺少什么?
更新:
..它基本上是一个IEnumerable,允许我迭代给定字符串中的单词。
答案 0 :(得分:3)
您的期望是正确的 - Any
会再次致电GetEnumerator
以获得新的IEnumerator<T>
。如果你已正确实施IEnumerable<T>
,那应该没问题。我猜你的WordEnumerable
的实现是不正确的。请发布代码:)
如果你写下会发生什么:
Console.WriteLine("First");
foreach (var word in wordEnumerable)
{
Console.WriteLine(word);
}
Console.WriteLine("Second");
foreach (var word in wordEnumerable)
{
Console.WriteLine(word);
}
?要检查的另一件事是WordEnumerable
实现IEnumerable<string>
而不是IEnumerable<object>
,否则您的==
检查将成为参考身份检查。