Home
Browse all 647 examples
Download all 647 examples
Download sample chapters
Reviews
Errata
Acknowledgments
Links on .NET
Paradoxal Press

Buy directly from Paradoxal Press at $33.99 (Save 43%)



Category: Programming
Level: Beginner to seasoned
900 pages
ISBN-10 097661322-0
ISBN-13 978-097661322-0
$59.99 USA
$79.99 CANADA


Listing 14-36 extracted from chapter Unsafe code, exceptions, anonymous methods, iterators


Listing 14-35<     > Listing 14-37


This listing can be compiled with the command line:
csc.exe /target:exe Example_14_36.cs
Errors: 0 Warnings: 0


Example_14_36.cs
using System.Collections;
public class Persons { // Doesn't implement IEnumerable!
   private class PersonsEnumerator : IEnumerator {
      private int index = -1;
      private Persons P;
      public PersonsEnumerator(Persons p){ this.P = p; }
      public bool MoveNext() {
         index++;
         return index < P.m_Names.Length;
      }
      public void Reset() { index = -1; }
      public object Current { get return P.m_Names[index]; } }
   }
   private class PersonsEnumerable : IEnumerable{
      private Persons m_Persons;
      internal PersonsEnumerable(Persons persons) { 
         m_Persons = persons;
      }
      IEnumerator IEnumerable.GetEnumerator(){
         return new PersonsEnumerator(m_Persons);
      }
   }
   public IEnumerable InOrder{ get {return new PersonsEnumerable(this);} }

   public IEnumerator GetEnumerator(){
      return new PersonsEnumerator(this);
   }
   string[] m_Names;
   public Persons(params string[] Names){
      m_Names = new string[Names.Length];
      Names.CopyTo(m_Names, 0);
   }
   private string this[int index]{
      get return m_Names[index]; }
      set { m_Names[index] = value; }
   }
}
class Program {
   static void Main() {
      Persons arrPersons = new Persons(
                         "Michel""Christine""Mathieu""Julien");
      foreach (string in arrPersons.InOrder)
         System.Console.WriteLine(s);
   }
}	
Copyright Patrick Smacchia 2006 2007