C#: циклическое перечисление IEnumerable

В моем текущем приложении есть иерархия команд.

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вызывается время от времени, поэтому необходимо сохранять состояние итерации.

Как реализовать циклическое перечисление?

Я нашел два решения:

  1. Использование интерфейса IEnumerator. Это выглядит так:

    if (!_enumerator.MoveNext())
    {
     _enumerator.Reset();
     _enumerator.MoveNext();
    }
    
  2. Использование циклического IEnumerable(yieldвсегда одна и та же последовательность): Реализация циклического итератора.

Возможно, есть и другие способы добиться этого. Что бы вы порекомендовали использовать и почему?

6
задан Sergey Brunov 22 May 2012 в 07:08
поделиться