Mega Code Archive

 
Categories / C# / Class Interface
 

Enumerator Example (Versioned Collection)

using System; using System.Collections; public class Starter {     public static void Main() {         MyCollection simple = new MyCollection(new object[] { 1, 2, 3, 4, 5, 6, 7 });         IEnumerator enumerator = simple.GetEnumerator();         enumerator.MoveNext();         Console.WriteLine(enumerator.Current);         enumerator.MoveNext();         simple[4] = 10;         Console.WriteLine(enumerator.Current);         enumerator.MoveNext();     } } public class MyCollection : IEnumerable {     public MyCollection(object[] array) {         items = array;         version = 1;     }     public object this[int index] {         get {             return items[index];         }         set {             ++version;             items[index] = value;         }     }     public IEnumerator GetEnumerator() {         return new Enumerator(this);     }     private class Enumerator : IEnumerator {         public Enumerator(MyCollection obj) {             oThis = obj;             cursor = -1;             version = oThis.version;         }         public bool MoveNext() {             ++cursor;             if (cursor > (oThis.items.Length - 1)) {                 return false;             }             return true;         }         public void Reset() {             cursor = -1;         }         public object Current {             get {                 if (oThis.version != version) {                     throw new InvalidOperationException("Collection was modified");                 }                 if (cursor > (oThis.items.Length - 1)) {                     throw new InvalidOperationException("Enumeration already finished");                 }                 if (cursor == -1) {                     throw new InvalidOperationException("Enumeration not started");                 }                 return oThis.items[cursor];             }         }         private int version;         private int cursor;         private MyCollection oThis;     }     private object[] items = null;     private int version; }