Collection is iterated using the IEnumerator interface

image_pdfimage_print
   
 

using System;
using System.Collections;

public class Starter {
    public static void Main() {
        SimpleCollection simple = new SimpleCollection(new object[] { 1, 2, 3, 4, 5, 6, 7 });
        IEnumerator enumerator = simple.GetEnumerator();
        while (enumerator.MoveNext()) {
            Console.WriteLine(enumerator.Current);
        }
    }
}

public class SimpleCollection : IEnumerable {
    public SimpleCollection(object[] array) {
        items = array;
    }
    public IEnumerator GetEnumerator() {
        return new Enumerator(items);
    }

    private object[] items = null;
}
public class Enumerator : IEnumerator {
    public Enumerator(object[] items) {
        elements = new object[items.Length];
        Array.Copy(items, elements, items.Length);
        cursor = -1;
    }
    public bool MoveNext() {
        ++cursor;
        if (cursor > (elements.Length - 1)) {
            return false;
        }
        return true;
    }
    public void Reset() {
        cursor = -1;
    }
    public object Current {
        get {
            if (cursor > (elements.Length - 1)) {
                throw new InvalidOperationException("Enumeration already finished");
            }
            if (cursor == -1) {
                throw new InvalidOperationException(
                    "Enumeration not started");
            }
            return elements[cursor];
        }
    }

    private int cursor;
    private object[] elements = null;
}