現在のアプリケーションにはコマンド階層があります。
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
は時々呼び出されるため、反復状態を保存する必要があります。
その循環列挙を実装する方法は?
私は2つの解決策を見つけました:
インターフェイスを使用し
IEnumerator<T>
ます。次のようになります。if (!_enumerator.MoveNext()) { _enumerator.Reset(); _enumerator.MoveNext(); }
サーキュラーの使用
IEnumerable<T>
(yield
永遠に同じシーケンス):「サーキュラーイテレーターの実装」-HonestIllusion.Com。
たぶん、それを達成するためのより多くの方法があります。
何を使用することをお勧めしますか、またその理由は何ですか?