У меня есть некоторый код, который я хотел бы реорганизовать с использованием итератора C # (т.е. IEnumerable). К сожалению, я не могу понять, как лучше всего разрешить другим функциям работать с итератором без перезапуска итератора.
Например:
NewLineEnumerator nle = new NewLineEnumerator();
while (bytesRead > 0)
{
var nlenum = nle.Process(inputData, bytesRead);
foreach (string block in nlenum)
{
DoSomething(nlenum);
}
}
void DoSomething(IEnumerable<string> myiter)
{
foreach (var s in myiter)
{
// myiter is restarted, and begins at the start of the iterator again
}
}
Вы можете спросить, почему я хотел бы сделать это. Причина в том, что у меня есть поток данных, окруженный «командными блоками». В зависимости от команды я отправляю ее в другую подфункцию для обработки. Поэтому я хочу продолжать повторять, где я остановился в потоке, либо в начале, либо в конце.
Есть предложения?