如何重构迭代器的使用

Eri*_*sch 0 c# refactoring iterator

我有一些代码我想重构使用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
  }
}
Run Code Online (Sandbox Code Playgroud)

你可能会问我为什么要这样做.原因是我有一个数据流,被"命令块"包围.根据命令,我将其发送到另一个子功能进行处理.所以我想在开始时或结束时继续迭代我在流中停留的位置.

这里有什么建议?

Nic*_*unn 5

通过调用GetEnumerator()传递IEnumerator <string>而不是IEnumerable <string>.它将保持呼叫状态.