【发布时间】:2012-05-28 14:45:13
【问题描述】:
我当前的应用程序中有命令层次结构。
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” - HonestIllusion.Com。
也许,还有更多方法可以实现。
您会推荐使用什么以及为什么?
【问题讨论】:
-
为了可重用性,我会实现一个循环迭代器。其实我现在只需要一个,来这里是希望得到一些灵感。但似乎没有一个解决方案似乎有效。好吧,我必须自己实现一个,并将其发布在这里作为答案。希望对其他人有所帮助。
标签: c# ienumerable ienumerator