我的当前应用程序中有命令层次结构。C#:枚举IEnumerable的循环枚举
public interface ICommand
{
void Execute();
}
所以,有些命令是有状态的,有些则不是。
我需要在命令执行过程中以循环的方式枚举某些命令实现的IEnumerable。
public class GetNumberCommand : ICommand
{
public GetNumberCommand()
{
List<int> numbers = new List<int>
{
1, 2, 3
};
}
public void Execute()
{
// Circular iteration here.
// 1 => 2 => 3 => 1 => 2 => 3 => ...
}
public void Stop()
{
// Log current value. (2 for example)
}
}
Execute
不时被调用,所以需要存储迭代状态。
如何实现该圆形枚举?
我发现两种解决方案:
使用
IEnumerator<T>
接口。 它看起来像:if (!_enumerator.MoveNext()) { _enumerator.Reset(); _enumerator.MoveNext(); }
使用圆形
IEnumerable<T>
(yield
永远相同的序列): Implementing A Circular Iterator。
也许有更多的方法来实现它。 你会推荐使用什么?为什么?
在我的情况下,执行'不时被调用,所以有必要存储迭代状态。 –