В моем текущем приложении есть иерархия команд.
public interface ICommand
{
void Execute();
}
Итак, некоторые команды сохраняют состояние, а некоторые нет.
Мне нужно перечислить IEnumerable по кругу для некоторой реализации команды во время выполнения команды.
public class GetNumberCommand : ICommand
{
public GetNumberCommand()
{
List numbers = new List
{
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
.
Это выглядит так:
if (!_enumerator.MoveNext())
{
_enumerator.Reset();
_enumerator.MoveNext();
}
Использование циклического IEnumerable
(yield
всегда одна и та же последовательность):
Реализация циклического итератора.
Возможно, есть и другие способы добиться этого. Что бы вы порекомендовали использовать и почему?