在 Enumerable 的同一迭代中执行 Enumerable.Elementat

本文关键字:Enumerable 执行 Elementat 迭代 | 更新日期: 2023-09-27 18:32:30

我正在迭代如下所示的IEnumerable

IEnumerable<string> readFile = ... ;
int lineNumber = 1;
foreach (string readLine in readFile)
{
   ...
   lineNumber++;
}

但是在循环过程中,我必须检查下一行。我为此使用ElementAt

foreach (string readLine in readFile)
{
   ...
   if (readFile.ElementAt(lineNumber+1) == ...)
   {
      // Do something
   }
   lineNumber++;
}

当我将上面的代码与ElementAt一起使用时,我得到了Possible multiple enumeration of IEnumerable

你能给我解释一下吗?或者我可以使用其他解决方案吗?我必须使用IEnumerable,因为我正在处理大文件

在 Enumerable 的同一迭代中执行 Enumerable.Elementat

好吧,任何时候你调用ElementAt,如果它只是一个序列(即不是IList<T>),它将不得不一直迭代序列,直到给定的元素编号 - 没有其他方法可以达到值。

听起来你应该只有:

string previousLine = null;
foreach (var line in readFile)
{
    // Work with line and previousLine here, understanding that on the
    // first iteration it will be null
    previousLine = line;
}