Я выполняю итерацию через IEnumerable
, как показано ниже.Do Enumerable.ElementAt в той же итерации Enumerable
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, потому что я работаю с большими файлами
Если вы используете 'File.ReadAllLines' вместо' File.ReadLines' читать строки, которые вы хотите получить массив. Затем вы можете использовать 'ElementAt', не перечислив весь файл снова и снова. Он оптимизирован таким образом, что он использует индекс, если его можно отличить до 'IList'. –
Но как насчет производительности? Не ReadAllLines медленнее, чем ReadLines? – Ozkan
Не обязательно, если файл не такой большой. Он читает все в памяти, поэтому он может быть более дорогим с точки зрения потребления памяти. –