L'écriture personnalisée IEnumerator<T> avec les itérateurs

Comment puis-je écrire une coutume IEnumerator<T> de mise en œuvre qui doit conserver une certaine état et toujours de commencer à utiliser un itérateur blocs de la simplifier? Le mieux que je puisse vous arriver, c'est quelque chose comme ceci:

public class MyEnumerator<T> : IEnumerator<T> {
    private IEnumerator<T> _enumerator;
    public int Position {get; private set;} //or some other custom properties

    public MyEnumerator() {
        Position = 0;
        _enumerator = MakeEnumerator();
    }

    private IEnumerator<T> MakeEnumerator() {
        //yield return something depending on Position
    } 

    public bool MoveNext() {
        bool res = _enumerator.MoveNext();
        if (res) Position++;
        return res;
    }

    //delegate Reset and Current to _enumerator as well
}

public class MyCollection<T> : IEnumerable<T> {

    IEnumerator<T> IEnumerable<T>.GetEnumerator() {
        return GetEnumerator();
    }

    public MyEnumerator<T> GetEnumerator() {
        return new MyEnumerator<T>();
    }

    ...
}

OriginalL'auteur Alexey Romanov | 2009-01-11