0

コードに実際の位置を保存せずに、SortedSetをループしたい。

公式の.NETドキュメントで、 First()メソッドが存在することに気付きましたが、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>();
    }
}

フレーム構造体:

public struct Frame
{
    Rectangle zone;
    TimeSpan duration;

    public Frame(Rectangle z, TimeSpan ts)
    {
        duration = ts;
        zone = z;
    }

}
4

1 に答える 1

5

探しているのは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;
    }
}

驚いたことに、はるかに単純なforeachループをそのまま利用することはできません。

SortedSet<Frame> frames = ...;
foreach(Frame frame in frames)
{
    // Do something with each frame
}
于 2013-02-28T23:10:01.427 に答える