Csharp/C Sharp by API/System.Collections/IEnumerator
Содержание
IEnumerator.Current
<source lang="csharp"> using System; using System.Collections; class MainClass {
public static void Main() { ArrayList myArrayList = new ArrayList(); myArrayList.Add("A"); myArrayList.Add("A"); myArrayList.Add("A"); myArrayList.Add("A"); myArrayList.Add("A"); myArrayList.Add("A"); myArrayList.Add("A"); myArrayList.Add("A"); myArrayList.Add("A"); myArrayList.Add("A"); string[] anotherStringArray = {"Here"s", "some", "more", "text"}; myArrayList.SetRange(0, anotherStringArray); Console.WriteLine("Using the GetEnumerator() method to get an enumerator"); IEnumerator myEnumerator = myArrayList.GetEnumerator(); while (myEnumerator.MoveNext()) { Console.WriteLine("myEnumerator.Current = " + myEnumerator.Current); } myEnumerator.Reset(); myEnumerator.MoveNext(); Console.WriteLine("myEnumerator.Current = " + myEnumerator.Current); }
}
</source>
IEnumerator.MoveNext()
<source lang="csharp"> using System; using System.Collections; class MainClass {
public static void Main() { ArrayList myArrayList = new ArrayList(); myArrayList.Add("A"); myArrayList.Add("A"); myArrayList.Add("A"); myArrayList.Add("A"); myArrayList.Add("A"); myArrayList.Add("A"); myArrayList.Add("A"); myArrayList.Add("A"); myArrayList.Add("A"); myArrayList.Add("A"); string[] anotherStringArray = {"Here"s", "some", "more", "text"}; myArrayList.SetRange(0, anotherStringArray); Console.WriteLine("Using the GetEnumerator() method to get an enumerator"); IEnumerator myEnumerator = myArrayList.GetEnumerator(); while (myEnumerator.MoveNext()) { Console.WriteLine("myEnumerator.Current = " + myEnumerator.Current); } myEnumerator.Reset(); myEnumerator.MoveNext(); Console.WriteLine("myEnumerator.Current = " + myEnumerator.Current); }
}
</source>
IEnumerator.Reset()
<source lang="csharp"> using System; using System.Collections; class MainClass {
public static void Main() { ArrayList myArrayList = new ArrayList(); myArrayList.Add("A"); myArrayList.Add("A"); myArrayList.Add("A"); myArrayList.Add("A"); myArrayList.Add("A"); myArrayList.Add("A"); myArrayList.Add("A"); myArrayList.Add("A"); myArrayList.Add("A"); myArrayList.Add("A"); string[] anotherStringArray = {"Here"s", "some", "more", "text"}; myArrayList.SetRange(0, anotherStringArray); Console.WriteLine("Using the GetEnumerator() method to get an enumerator"); IEnumerator myEnumerator = myArrayList.GetEnumerator(); while (myEnumerator.MoveNext()) { Console.WriteLine("myEnumerator.Current = " + myEnumerator.Current); } myEnumerator.Reset(); myEnumerator.MoveNext(); Console.WriteLine("myEnumerator.Current = " + myEnumerator.Current); }
}
</source>
Implement IEnumerator
<source lang="csharp"> using System; using System.Threading; using System.Collections; using System.Collections.Generic; public class MyEnumerable<T> : IEnumerable<T> {
public MyEnumerable( T[] items ) { this.items = items; } public IEnumerator<T> GetEnumerator() { return new NestedEnumerator( this ); } IEnumerator IEnumerable.GetEnumerator() { return GetEnumerator(); } // The enumerator definition. class NestedEnumerator : IEnumerator<T> { public NestedEnumerator( MyEnumerable<T> coll ) { Monitor.Enter( coll.items.SyncRoot ); this.index = -1; this.coll = coll; } public T Current { get { return current; } } object IEnumerator.Current { get { return Current; } } public bool MoveNext() { if( ++index >= coll.items.Length ) { return false; } else { current = coll.items[index]; return true; } } public void Reset() { current = default(T); index = 0; } public void Dispose() { try { current = default(T); index = coll.items.Length; } finally { Monitor.Exit( coll.items.SyncRoot ); } } private MyEnumerable<T> coll; private T current; private int index; } private T[] items;
} public class EntryPoint {
static void Main() { MyEnumerable<int> integers = new MyEnumerable<int>( new int[] {1, 2, 3, 4} ); foreach( int n in integers ) { Console.WriteLine( n ); } }
}
</source>