<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://nfex.ru/index.php?action=history&amp;feed=atom&amp;title=Csharp%2FCSharp_Tutorial%2FData_Structure%2FIEnumerator</id>
		<title>Csharp/CSharp Tutorial/Data Structure/IEnumerator - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://nfex.ru/index.php?action=history&amp;feed=atom&amp;title=Csharp%2FCSharp_Tutorial%2FData_Structure%2FIEnumerator"/>
		<link rel="alternate" type="text/html" href="http://nfex.ru/index.php?title=Csharp/CSharp_Tutorial/Data_Structure/IEnumerator&amp;action=history"/>
		<updated>2026-04-29T23:12:26Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://nfex.ru/index.php?title=Csharp/CSharp_Tutorial/Data_Structure/IEnumerator&amp;diff=5537&amp;oldid=prev</id>
		<title> в 15:31, 26 мая 2010</title>
		<link rel="alternate" type="text/html" href="http://nfex.ru/index.php?title=Csharp/CSharp_Tutorial/Data_Structure/IEnumerator&amp;diff=5537&amp;oldid=prev"/>
				<updated>2010-05-26T15:31:53Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr style=&quot;vertical-align: top;&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Предыдущая&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Версия 15:31, 26 мая 2010&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; style=&quot;text-align: center;&quot; lang=&quot;ru&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(нет различий)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
			</entry>

	<entry>
		<id>http://nfex.ru/index.php?title=Csharp/CSharp_Tutorial/Data_Structure/IEnumerator&amp;diff=5538&amp;oldid=prev</id>
		<title>Admin: 1 версия</title>
		<link rel="alternate" type="text/html" href="http://nfex.ru/index.php?title=Csharp/CSharp_Tutorial/Data_Structure/IEnumerator&amp;diff=5538&amp;oldid=prev"/>
				<updated>2010-05-26T12:15:51Z</updated>
		
		<summary type="html">&lt;p&gt;1 версия&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==A simple example of an iterator.==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;using System; &lt;br /&gt;
using System.Collections; &lt;br /&gt;
 &lt;br /&gt;
class MyClass { &lt;br /&gt;
  char[] chrs = { &amp;quot;A&amp;quot;, &amp;quot;B&amp;quot;, &amp;quot;C&amp;quot;, &amp;quot;D&amp;quot; }; &lt;br /&gt;
 &lt;br /&gt;
  public IEnumerator GetEnumerator() { &lt;br /&gt;
    foreach(char ch in chrs) &lt;br /&gt;
      yield return ch; &lt;br /&gt;
  } &lt;br /&gt;
} &lt;br /&gt;
 &lt;br /&gt;
class MainClass { &lt;br /&gt;
  public static void Main() { &lt;br /&gt;
    MyClass mc = new MyClass(); &lt;br /&gt;
 &lt;br /&gt;
    foreach(char ch in mc) &lt;br /&gt;
      Console.Write(ch + &amp;quot; &amp;quot;); &lt;br /&gt;
 &lt;br /&gt;
    Console.WriteLine(); &lt;br /&gt;
  } &lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;pre class=codeResult&amp;gt;A B C D&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Build your own IEnumerator/IEnumerable and use it in foreach loop==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;using System;&lt;br /&gt;
using System.Collections;&lt;br /&gt;
class LetterEnumerator : IEnumerator&lt;br /&gt;
{&lt;br /&gt;
   string[] letters;&lt;br /&gt;
   int Position = -1;&lt;br /&gt;
   public LetterEnumerator(string[] theletters) &lt;br /&gt;
   {&lt;br /&gt;
      letters = new string[theletters.Length];&lt;br /&gt;
      for (int i = 0; i &amp;lt; theletters.Length; i++)&lt;br /&gt;
         letters[i] = theletters[i];&lt;br /&gt;
   }&lt;br /&gt;
   public object Current                    &lt;br /&gt;
   {&lt;br /&gt;
      get { return letters[Position]; }&lt;br /&gt;
   }&lt;br /&gt;
   public bool MoveNext()                   &lt;br /&gt;
   {&lt;br /&gt;
      if (Position &amp;lt; letters.Length - 1){ &lt;br /&gt;
         Position++; return true; &lt;br /&gt;
      }&lt;br /&gt;
      else&lt;br /&gt;
         return false;&lt;br /&gt;
   }&lt;br /&gt;
   public void Reset()                      &lt;br /&gt;
   {&lt;br /&gt;
      Position = -1;&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
class LetterList : IEnumerable&lt;br /&gt;
{&lt;br /&gt;
   string[] letters = { &amp;quot;A&amp;quot;, &amp;quot;B&amp;quot;, &amp;quot;C&amp;quot; };&lt;br /&gt;
   public IEnumerator GetEnumerator()&lt;br /&gt;
   {&lt;br /&gt;
      return new LetterEnumerator(letters);&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
class MainClass&lt;br /&gt;
{&lt;br /&gt;
   static void Main()&lt;br /&gt;
   {&lt;br /&gt;
      LetterList mc = new LetterList();&lt;br /&gt;
      foreach (string l in mc)&lt;br /&gt;
         Console.WriteLine(&amp;quot;{0} &amp;quot;, l);&lt;br /&gt;
   }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;pre class=codeResult&amp;gt;A&lt;br /&gt;
B&lt;br /&gt;
C&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Circular Iterator==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;/*&lt;br /&gt;
Quote from&lt;br /&gt;
Accelerated C# 2005&lt;br /&gt;
# By Trey Nash&lt;br /&gt;
# ISBN: 1-59059-717-6&lt;br /&gt;
# 432 pp.&lt;br /&gt;
# Published: Aug 2006&lt;br /&gt;
*/&lt;br /&gt;
using System;&lt;br /&gt;
using System.Collections;&lt;br /&gt;
using System.Collections.Generic;&lt;br /&gt;
public class MainClass&lt;br /&gt;
{&lt;br /&gt;
    static void Main() {&lt;br /&gt;
        LinkedList&amp;lt;int&amp;gt; intList = new LinkedList&amp;lt;int&amp;gt;();&lt;br /&gt;
        for( int i = 1; i &amp;lt; 6; ++i ) {&lt;br /&gt;
            intList.AddLast( i );&lt;br /&gt;
        }&lt;br /&gt;
        CircularIterator&amp;lt;int&amp;gt; iter = new CircularIterator&amp;lt;int&amp;gt;(intList, intList.First);&lt;br /&gt;
        int counter = 0;&lt;br /&gt;
        foreach( int n in iter ) {&lt;br /&gt;
            Console.WriteLine( n );&lt;br /&gt;
            if( counter++ == 100 ) {&lt;br /&gt;
                iter.Stop();&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
public class CircularIterator&amp;lt;T&amp;gt; : IEnumerable&amp;lt;T&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    public CircularIterator( LinkedList&amp;lt;T&amp;gt; list, LinkedListNode&amp;lt;T&amp;gt; start ) {&lt;br /&gt;
        enumerator = CreateEnumerator( list, start, false ).GetEnumerator();&lt;br /&gt;
        enumType = enumerator.GetType();&lt;br /&gt;
    }&lt;br /&gt;
    public void Stop() {&lt;br /&gt;
        enumType.GetField(&amp;quot;stop&amp;quot;).SetValue( enumerator, true );&lt;br /&gt;
    }&lt;br /&gt;
    private IEnumerator&amp;lt;T&amp;gt; enumerator;&lt;br /&gt;
    private Type enumType;&lt;br /&gt;
    private IEnumerable&amp;lt;T&amp;gt; CreateEnumerator( LinkedList&amp;lt;T&amp;gt; list, LinkedListNode&amp;lt;T&amp;gt; start, bool stop ) {&lt;br /&gt;
        LinkedListNode&amp;lt;T&amp;gt; current = null;&lt;br /&gt;
        do {&lt;br /&gt;
            if( current == null ) {&lt;br /&gt;
                current = start;&lt;br /&gt;
            } else {&lt;br /&gt;
                current = current.Next;&lt;br /&gt;
                if( current == null ) {&lt;br /&gt;
                    current = start;&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            yield return current.Value;&lt;br /&gt;
        } while( !stop );&lt;br /&gt;
    }&lt;br /&gt;
    public IEnumerator&amp;lt;T&amp;gt; GetEnumerator() {&lt;br /&gt;
        return enumerator;&lt;br /&gt;
    }&lt;br /&gt;
    IEnumerator IEnumerable.GetEnumerator() {&lt;br /&gt;
        return GetEnumerator();&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;pre class=codeResult&amp;gt;1&lt;br /&gt;
2&lt;br /&gt;
3&lt;br /&gt;
4&lt;br /&gt;
5&lt;br /&gt;
1&lt;br /&gt;
2&lt;br /&gt;
3&lt;br /&gt;
4&lt;br /&gt;
5&lt;br /&gt;
1&lt;br /&gt;
2&lt;br /&gt;
3&lt;br /&gt;
4&lt;br /&gt;
5&lt;br /&gt;
1&lt;br /&gt;
2&lt;br /&gt;
3&lt;br /&gt;
4&lt;br /&gt;
5&lt;br /&gt;
1&lt;br /&gt;
2&lt;br /&gt;
3&lt;br /&gt;
4&lt;br /&gt;
5&lt;br /&gt;
1&lt;br /&gt;
2&lt;br /&gt;
3&lt;br /&gt;
4&lt;br /&gt;
5&lt;br /&gt;
1&lt;br /&gt;
2&lt;br /&gt;
3&lt;br /&gt;
4&lt;br /&gt;
5&lt;br /&gt;
1&lt;br /&gt;
2&lt;br /&gt;
3&lt;br /&gt;
4&lt;br /&gt;
5&lt;br /&gt;
1&lt;br /&gt;
2&lt;br /&gt;
3&lt;br /&gt;
4&lt;br /&gt;
5&lt;br /&gt;
1&lt;br /&gt;
2&lt;br /&gt;
3&lt;br /&gt;
4&lt;br /&gt;
5&lt;br /&gt;
1&lt;br /&gt;
2&lt;br /&gt;
3&lt;br /&gt;
4&lt;br /&gt;
5&lt;br /&gt;
1&lt;br /&gt;
2&lt;br /&gt;
3&lt;br /&gt;
4&lt;br /&gt;
5&lt;br /&gt;
1&lt;br /&gt;
2&lt;br /&gt;
3&lt;br /&gt;
4&lt;br /&gt;
5&lt;br /&gt;
1&lt;br /&gt;
2&lt;br /&gt;
3&lt;br /&gt;
4&lt;br /&gt;
5&lt;br /&gt;
1&lt;br /&gt;
2&lt;br /&gt;
3&lt;br /&gt;
4&lt;br /&gt;
5&lt;br /&gt;
1&lt;br /&gt;
2&lt;br /&gt;
3&lt;br /&gt;
4&lt;br /&gt;
5&lt;br /&gt;
1&lt;br /&gt;
2&lt;br /&gt;
3&lt;br /&gt;
4&lt;br /&gt;
5&lt;br /&gt;
1&lt;br /&gt;
2&lt;br /&gt;
3&lt;br /&gt;
4&lt;br /&gt;
5&lt;br /&gt;
1&lt;br /&gt;
2&lt;br /&gt;
3&lt;br /&gt;
4&lt;br /&gt;
5&lt;br /&gt;
1&lt;br /&gt;
2&lt;br /&gt;
3&lt;br /&gt;
4&lt;br /&gt;
5&lt;br /&gt;
1&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Define custom enumerators and use foreach to loop through==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;// Code revised from &lt;br /&gt;
//A Programmer&amp;quot;s Introduction to C# 2.0, Third Edition&lt;br /&gt;
using System;&lt;br /&gt;
using System.Collections;&lt;br /&gt;
// Note: This class is not thread-safe&lt;br /&gt;
public class IntList: IEnumerable&lt;br /&gt;
{&lt;br /&gt;
    int[] values = new int[10];&lt;br /&gt;
    int allocated = 10;&lt;br /&gt;
    int count = 0;&lt;br /&gt;
    int revision = 0;&lt;br /&gt;
    &lt;br /&gt;
    public void Add(int value)&lt;br /&gt;
    {&lt;br /&gt;
        // reallocate if necessary&lt;br /&gt;
        if (count + 1 == allocated)&lt;br /&gt;
        {&lt;br /&gt;
            int[] newValues = new int[allocated * 2];&lt;br /&gt;
            for (int index = 0; index &amp;lt; count; index++)&lt;br /&gt;
            {&lt;br /&gt;
                newValues[index] = values[index];&lt;br /&gt;
            }&lt;br /&gt;
            allocated *= 2;&lt;br /&gt;
        }        &lt;br /&gt;
        values[count] = value;&lt;br /&gt;
        count++;&lt;br /&gt;
        revision++;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public int Count&lt;br /&gt;
    {&lt;br /&gt;
        get&lt;br /&gt;
        {&lt;br /&gt;
            return(count);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    void CheckIndex(int index)&lt;br /&gt;
    {&lt;br /&gt;
        if (index &amp;gt;= count)&lt;br /&gt;
        throw new ArgumentOutOfRangeException(&amp;quot;Index value out of range&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public int this[int index]&lt;br /&gt;
    {&lt;br /&gt;
        get&lt;br /&gt;
        {&lt;br /&gt;
            CheckIndex(index);&lt;br /&gt;
            return(values[index]);&lt;br /&gt;
        }&lt;br /&gt;
        set&lt;br /&gt;
        {&lt;br /&gt;
            CheckIndex(index);&lt;br /&gt;
            values[index] = value;&lt;br /&gt;
            revision++;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public IEnumerator GetEnumerator()&lt;br /&gt;
    {&lt;br /&gt;
        return(new IntListEnumerator(this));&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    internal int Revision&lt;br /&gt;
    {&lt;br /&gt;
        get&lt;br /&gt;
        {&lt;br /&gt;
            return(revision);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
class IntListEnumerator: IEnumerator&lt;br /&gt;
{&lt;br /&gt;
    IntList    intList;&lt;br /&gt;
    int revision;&lt;br /&gt;
    int index;&lt;br /&gt;
    &lt;br /&gt;
    internal IntListEnumerator(IntList intList)&lt;br /&gt;
    {&lt;br /&gt;
        this.intList = intList;&lt;br /&gt;
        Reset();&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public bool MoveNext()&lt;br /&gt;
    {&lt;br /&gt;
        index++;&lt;br /&gt;
        if (index &amp;gt;= intList.Count)&lt;br /&gt;
        return(false);&lt;br /&gt;
        else&lt;br /&gt;
        return(true);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public object Current&lt;br /&gt;
    {&lt;br /&gt;
        get&lt;br /&gt;
        {&lt;br /&gt;
            if (revision != intList.Revision)&lt;br /&gt;
            throw new InvalidOperationException(&amp;quot;Collection modified while enumerating.&amp;quot;);&lt;br /&gt;
            return(intList[index]);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public void Reset()&lt;br /&gt;
    {&lt;br /&gt;
        index = -1;&lt;br /&gt;
        revision = intList.Revision;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
class MainClass&lt;br /&gt;
{&lt;br /&gt;
    public static void Main()&lt;br /&gt;
    {&lt;br /&gt;
        IntList list = new IntList();&lt;br /&gt;
        &lt;br /&gt;
        list.Add(1);&lt;br /&gt;
        list.Add(55);&lt;br /&gt;
        list.Add(43);&lt;br /&gt;
        &lt;br /&gt;
        foreach (int value in list)&lt;br /&gt;
        {&lt;br /&gt;
            Console.WriteLine(&amp;quot;Value = {0}&amp;quot;, value);&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        foreach (int value in list)&lt;br /&gt;
        {&lt;br /&gt;
            Console.WriteLine(&amp;quot;Value = {0}&amp;quot;, value);&lt;br /&gt;
            list.Add(124);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;pre class=codeResult&amp;gt;Value = 1&lt;br /&gt;
Value = 55&lt;br /&gt;
Value = 43&lt;br /&gt;
Value = 1&lt;br /&gt;
Unhandled Exception: System.InvalidOperationException: Collection modified while enumerating.&lt;br /&gt;
   at IntListEnumerator.get_Current()&lt;br /&gt;
   at MainClass.Main()&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Implement IEnumerable and IEnumerator==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;using System; &lt;br /&gt;
using System.Collections; &lt;br /&gt;
 &lt;br /&gt;
class MyClass : IEnumerator, IEnumerable { &lt;br /&gt;
  char[] chrs = { &amp;quot;A&amp;quot;, &amp;quot;B&amp;quot;, &amp;quot;C&amp;quot;, &amp;quot;D&amp;quot; }; &lt;br /&gt;
  int index = -1; &lt;br /&gt;
 &lt;br /&gt;
  // Implement IEnumerable. &lt;br /&gt;
  public IEnumerator GetEnumerator() { &lt;br /&gt;
    return this; &lt;br /&gt;
  } &lt;br /&gt;
 &lt;br /&gt;
  // The following methods implement IEnumerator. &lt;br /&gt;
 &lt;br /&gt;
  // Return the current object. &lt;br /&gt;
  public object Current { &lt;br /&gt;
    get { &lt;br /&gt;
      return chrs[index]; &lt;br /&gt;
    } &lt;br /&gt;
  } &lt;br /&gt;
 &lt;br /&gt;
  // Advance to the next object.  &lt;br /&gt;
  public bool MoveNext() { &lt;br /&gt;
    if(index == chrs.Length-1) { &lt;br /&gt;
      Reset(); // reset enumerator at the end. &lt;br /&gt;
      return false; &lt;br /&gt;
    } &lt;br /&gt;
     &lt;br /&gt;
    index++; &lt;br /&gt;
    return true; &lt;br /&gt;
  } &lt;br /&gt;
    &lt;br /&gt;
  // Reset the enumerator to the start. &lt;br /&gt;
  public void Reset() { &lt;br /&gt;
    index = -1; &lt;br /&gt;
  }  &lt;br /&gt;
} &lt;br /&gt;
 &lt;br /&gt;
class MainClass { &lt;br /&gt;
  public static void Main() { &lt;br /&gt;
    MyClass mc = new MyClass(); &lt;br /&gt;
 &lt;br /&gt;
    // Display the contents of mc. &lt;br /&gt;
    foreach(char ch in mc) &lt;br /&gt;
      Console.Write(ch + &amp;quot; &amp;quot;); &lt;br /&gt;
 &lt;br /&gt;
    Console.WriteLine(); &lt;br /&gt;
 &lt;br /&gt;
    // Display the contents of mc, again. &lt;br /&gt;
    foreach(char ch in mc) &lt;br /&gt;
      Console.Write(ch + &amp;quot; &amp;quot;); &lt;br /&gt;
 &lt;br /&gt;
    Console.WriteLine(); &lt;br /&gt;
  } &lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;pre class=codeResult&amp;gt;A B C D&lt;br /&gt;
A B C D&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Iterated values can be dynamically constructed.==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;using System; &lt;br /&gt;
using System.Collections; &lt;br /&gt;
 &lt;br /&gt;
class MyClass { &lt;br /&gt;
  char ch = &amp;quot;A&amp;quot;; &lt;br /&gt;
 &lt;br /&gt;
  public IEnumerator GetEnumerator() { &lt;br /&gt;
    for(int i=0; i &amp;lt; 26; i++) &lt;br /&gt;
      yield return (char) (ch + i); &lt;br /&gt;
  } &lt;br /&gt;
} &lt;br /&gt;
 &lt;br /&gt;
class MainClass { &lt;br /&gt;
  public static void Main() { &lt;br /&gt;
    MyClass mc = new MyClass(); &lt;br /&gt;
 &lt;br /&gt;
    foreach(char ch in mc) &lt;br /&gt;
      Console.Write(ch + &amp;quot; &amp;quot;); &lt;br /&gt;
 &lt;br /&gt;
    Console.WriteLine(); &lt;br /&gt;
  } &lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;pre class=codeResult&amp;gt;A B C D E F G H I J K L M N O P Q R S T U V W X Y Z&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Iteration Sample==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;using System;&lt;br /&gt;
using System.Collections;&lt;br /&gt;
using System.ruponentModel;&lt;br /&gt;
        class IterationSampleIterator : IEnumerator{&lt;br /&gt;
            public IterationSample parent;&lt;br /&gt;
            public int position;&lt;br /&gt;
            internal IterationSampleIterator(IterationSample parent){&lt;br /&gt;
                this.parent = parent;&lt;br /&gt;
                position = -1;&lt;br /&gt;
            }&lt;br /&gt;
            public bool MoveNext(){&lt;br /&gt;
                if (position != parent.values.Length){&lt;br /&gt;
                    position++;&lt;br /&gt;
                }&lt;br /&gt;
                return position &amp;lt; parent.values.Length;&lt;br /&gt;
            }&lt;br /&gt;
            public object Current{&lt;br /&gt;
                get{&lt;br /&gt;
                    if (position == -1 || position == parent.values.Length){&lt;br /&gt;
                        throw new InvalidOperationException();&lt;br /&gt;
                    }&lt;br /&gt;
                    int index = (position + parent.startingPoint);&lt;br /&gt;
                    index = index % parent.values.Length;&lt;br /&gt;
                    return parent.values[index];&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            public void Reset(){&lt;br /&gt;
                position = -1;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        class IterationSample : IEnumerable{&lt;br /&gt;
            public object[] values;&lt;br /&gt;
            public int startingPoint;&lt;br /&gt;
    &lt;br /&gt;
            public IterationSample(object[] values, int startingPoint){&lt;br /&gt;
                this.values = values;&lt;br /&gt;
                this.startingPoint = startingPoint;&lt;br /&gt;
            }&lt;br /&gt;
    &lt;br /&gt;
            public IEnumerator GetEnumerator()&lt;br /&gt;
            {&lt;br /&gt;
                return new IterationSampleIterator(this);&lt;br /&gt;
            }&lt;br /&gt;
            public static void Main(){&lt;br /&gt;
                object[] values = { &amp;quot;a&amp;quot;, &amp;quot;b&amp;quot;, &amp;quot;c&amp;quot;, &amp;quot;d&amp;quot;, &amp;quot;e&amp;quot; };&lt;br /&gt;
                IterationSample collection = new IterationSample(values, 3);&lt;br /&gt;
                foreach (object x in collection){&lt;br /&gt;
                    Console.WriteLine(x);&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Iterator Workflow==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;using System;&lt;br /&gt;
    using System.Collections.Generic;&lt;br /&gt;
    using System.ruponentModel;&lt;br /&gt;
    class IteratorWorkflow&lt;br /&gt;
    {&lt;br /&gt;
        static readonly string Padding = new string(&amp;quot; &amp;quot;, 30);&lt;br /&gt;
        static IEnumerable&amp;lt;int&amp;gt; GetEnumerable(){&lt;br /&gt;
            Console.WriteLine(Padding);&lt;br /&gt;
            for (int i = 0; i &amp;lt; 3; i++){&lt;br /&gt;
                Console.WriteLine(&amp;quot;{0}About to yield {1}&amp;quot;, Padding, i);&lt;br /&gt;
                yield return i;&lt;br /&gt;
                Console.WriteLine(&amp;quot;{0}After yield&amp;quot;, Padding);&lt;br /&gt;
            }&lt;br /&gt;
            Console.WriteLine(Padding);&lt;br /&gt;
            yield return -1;&lt;br /&gt;
        }&lt;br /&gt;
        static void Main(){&lt;br /&gt;
            IEnumerable&amp;lt;int&amp;gt; iterable = GetEnumerable();&lt;br /&gt;
            IEnumerator&amp;lt;int&amp;gt; iterator = iterable.GetEnumerator();&lt;br /&gt;
            while (true){&lt;br /&gt;
                bool result = iterator.MoveNext();&lt;br /&gt;
                Console.WriteLine(result);&lt;br /&gt;
                if (!result)&lt;br /&gt;
                {&lt;br /&gt;
                    break;&lt;br /&gt;
                }&lt;br /&gt;
                Console.WriteLine(iterator.Current);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Use named iterators==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;using System; &lt;br /&gt;
using System.Collections; &lt;br /&gt;
 &lt;br /&gt;
class MyClass { &lt;br /&gt;
  char ch = &amp;quot;1&amp;quot;; &lt;br /&gt;
 &lt;br /&gt;
  public IEnumerable MyItr(int end) { &lt;br /&gt;
    for(int i=0; i &amp;lt; end; i++) &lt;br /&gt;
      yield return (char) (ch + i); &lt;br /&gt;
  } &lt;br /&gt;
} &lt;br /&gt;
 &lt;br /&gt;
class MainClass { &lt;br /&gt;
  public static void Main() { &lt;br /&gt;
    MyClass mc = new MyClass(); &lt;br /&gt;
 &lt;br /&gt;
    foreach(char ch in mc.MyItr(7)) &lt;br /&gt;
      Console.Write(ch + &amp;quot; &amp;quot;); &lt;br /&gt;
 &lt;br /&gt;
    Console.WriteLine(&amp;quot;\n&amp;quot;); &lt;br /&gt;
 &lt;br /&gt;
  } &lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;pre class=codeResult&amp;gt;1 2 3 4 5 6 7&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Use the Enumerable pattern==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;using System; &lt;br /&gt;
using System.Collections; &lt;br /&gt;
 &lt;br /&gt;
class MyClass { &lt;br /&gt;
  char ch = &amp;quot;1&amp;quot;; &lt;br /&gt;
 &lt;br /&gt;
  public IEnumerable MyItr(int begin, int end) { &lt;br /&gt;
    for(int i=begin; i &amp;lt; end; i++) &lt;br /&gt;
      yield return (char) (ch + i); &lt;br /&gt;
  } &lt;br /&gt;
} &lt;br /&gt;
 &lt;br /&gt;
class MainClass { &lt;br /&gt;
  public static void Main() { &lt;br /&gt;
    MyClass mc = new MyClass(); &lt;br /&gt;
 &lt;br /&gt;
    foreach(char ch in mc.MyItr(5, 12)) &lt;br /&gt;
      Console.Write(ch + &amp;quot; &amp;quot;); &lt;br /&gt;
 &lt;br /&gt;
    Console.WriteLine(); &lt;br /&gt;
  } &lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;pre class=codeResult&amp;gt;6 7 8 9 : ; &amp;lt;&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	</feed>