4

Jun

CircularIterator (Iteratore Circolare) in C#

Siccome non c’è (almeno non mi sembra) ho cercato tempo fa, per un progetto, un iteratore circolare, quindi “tel chi” (tuttavia non mi ricordo assolutamente la fonte):

[code language="csharp"]
public class CircularIterator : IEnumerable
{
    public CircularIterator(LinkedList list)
    {
        enumerator = CreateEnumerator(list, list.First, false).GetEnumerator();
        enumType = enumerator.GetType();
    }
    public void Stop()
    {
        enumType.GetField("stop").SetValue(enumerator, true);
    }

    private IEnumerator enumerator;
    private Type enumType;

    private IEnumerable CreateEnumerator(LinkedList list, LinkedListNode start, bool stop)
    {
        LinkedListNode current = null;
        do
        {
            if (current == null)
            {
                current = start;
            }
            else
            {
                current = current.Next;
                if (current == null)
                {
                    current = start;
                }
            }
            yield return current.Value;
        } while (!stop);
    }

    public IEnumerator GetEnumerator()
    {
        return enumerator;
    }

    IEnumerator IEnumerable.GetEnumerator()
    {
        return GetEnumerator();
    }
}[/code]

by Roberto Freato on 6/4/2010
Post archive