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