在 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,因为我正在处理大文件
好吧,任何时候你调用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;
}