Existe la jerarquía de comandos en mi aplicación actual.C#: enumeración circular de IEnumerable
public interface ICommand
{
void Execute();
}
Por lo tanto, algunos comandos son con estado, otros no.
Necesito enumerar IEnumerable de forma circular para implementar algunos comandos durante la ejecución del comando.
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
se llama de vez en cuando, por lo que es necesario para almacenar el estado de iteración.
¿Cómo implementar esa enumeración circular?
he encontrado dos soluciones:
Mediante la interfaz de
IEnumerator<T>
. Parece que :if (!_enumerator.MoveNext()) { _enumerator.Reset(); _enumerator.MoveNext(); }
Usando la circular
IEnumerable<T>
(yield
siempre la misma secuencia): Implementing A Circular Iterator.
Quizás haya más formas de lograrlo. ¿Qué recomendarías usar y por qué?
En mi caso, se ejecuta 'Execute' de vez en cuando, por lo que es necesario almacenar el estado de iteración. –