我想循环一个SortedSet而不必保存我的代码中的实际位置.
在官方的.NET机制的文档我注意到一个第一()方法存在,但我没有找到一个Next<T>()方法或一种(getNext,goNext,Iterate...).
我想要编码的是这样的:
private SortedSet<Frame> frames;
[...]
public Frame getNextFrame() {
if (frames.Next<Frame>()) //didnt exists
{
return frames.Current<Frame>() //didnt exists
} else {
return frames.First<Frame>();
}
}
Run Code Online (Sandbox Code Playgroud)
框架结构:
public struct Frame
{
Rectangle zone;
TimeSpan duration;
public Frame(Rectangle z, TimeSpan ts)
{
duration = ts;
zone = z;
}
}
Run Code Online (Sandbox Code Playgroud)
你要找的是IEnumerator<T>对SortedSet<T>,你可以得到这个 SortedSet<T>.GetEnumerator().
所以你可以做类似以下的事情:
public class MyClass
{
private readonly IEnumerator<Frame> _enumerator;
public MyClass(SortedSet<Frame> frames)
{
_enumerator = frames.GetEnumerator();
}
public Frame GetNextFrame()
{
// If there is no next item, loop back to the beginning
// you probably won't want this, but a call to MoveNext() is required
// it's up to you what to do if there is no next item.
if(!_enumerator.MoveNext())
_enumerator.Reset();
return _enumerator.Current;
}
}
Run Code Online (Sandbox Code Playgroud)
虽然我很惊讶你不能只使用更简单的foreach循环:
SortedSet<Frame> frames = ...;
foreach(Frame frame in frames)
{
// Do something with each frame
}
Run Code Online (Sandbox Code Playgroud)