在Enumerable的同一次迭代中执行Enumerable.ElementAt

时间:2014-11-28 11:53:40

标签: c# ienumerable

我正在迭代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,因为我正在处理大文件

1 个答案:

答案 0 :(得分:5)

每当你打电话给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;
}