Enumerators and Foreach

image_pdfimage_print

   
  
/*
A Programmer's Introduction to C# (Second Edition)
by Eric Gunnerson

Publisher: Apress  L.P.
ISBN: 1-893115-62-3
*/
// 19 - Indexers and EnumeratorsEnumerators and Foreach
// copyright 2000 Eric Gunnerson
using System;
using System.Collections;

// Note: This class is not thread-safe
class IntList: IEnumerable
{
    int[] values = new int[10];
    int allocated = 10;
    int count = 0;
    int revision = 0;
    
    public void Add(int value)
    {
        // reallocate if necessary
        if (count + 1 == allocated)
        {
            int[] newValues = new int[allocated * 2];
            for (int index = 0; index < count; index++)
            {
                newValues&#91;index&#93; = values&#91;index&#93;;
            }
            allocated *= 2;
        }        
        values&#91;count&#93; = value;
        count++;
        revision++;
    }
    
    public int Count
    {
        get
        {
            return(count);
        }
    }
    
    void CheckIndex(int index)
    {
        if (index >= count)
        throw new ArgumentOutOfRangeException("Index value out of range");
    }
    
    public int this[int index]
    {
        get
        {
            CheckIndex(index);
            return(values[index]);
        }
        set
        {
            CheckIndex(index);
            values[index] = value;
            revision++;
        }
    }
    
    public IEnumerator GetEnumerator()
    {
        return(new IntListEnumerator(this));
    }
    
    internal int Revision
    {
        get
        {
            return(revision);
        }
    }
}

class IntListEnumerator: IEnumerator
{
    IntList    intList;
    int revision;
    int index;
    
    internal IntListEnumerator(IntList intList)
    {
        this.intList = intList;
        Reset();
    }
    
    public bool MoveNext()
    {
        index++;
        if (index >= intList.Count)
        return(false);
        else
        return(true);
    }
    
    public object Current
    {
        get
        {
            if (revision != intList.Revision)
            throw new InvalidOperationException("Collection modified while enumerating.");
            return(intList[index]);
        }
    }
    
    public void Reset()
    {
        index = -1;
        revision = intList.Revision;
    }
}

public class EnumeratorsandForeach {
    public static void Main()
    {
        IntList list = new IntList();
        
        list.Add(1);
        list.Add(55);
        list.Add(43);
        
        foreach (int value in list)
        {
            Console.WriteLine("Value = {0}", value);
        }
        
        foreach (int value in list)
        {
            Console.WriteLine("Value = {0}", value);
            list.Add(124);
        }
    }
}

           
         
    
     


Demonstrate IDictionaryEnumerator

image_pdfimage_print

   
  
/*
C#: The Complete Reference 
by Herbert Schildt 

Publisher: Osborne/McGraw-Hill (March 8, 2002)
ISBN: 0072134852
*/

// Demonstrate IDictionaryEnumerator. 
 
using System; 
using System.Collections; 
 
public class IDicEnumDemo { 
  public static void Main() { 
    // Create a hash table. 
    Hashtable ht = new Hashtable(); 
     
    // Add elements to the table 
    ht.Add("Tom", "555-3456"); 
    ht.Add("Mary", "555-9876"); 
    ht.Add("Todd", "555-3452"); 
    ht.Add("Ken", "555-7756"); 
 
    // Demonstrate enumerator 
    IDictionaryEnumerator etr = ht.GetEnumerator(); 
    Console.WriteLine("Display info using through Entry."); 
    while(etr.MoveNext())  
     Console.WriteLine(etr.Entry.Key + ": " +  
                       etr.Entry.Value); 
 
    Console.WriteLine(); 
 
    Console.WriteLine("Display info using Key and Value directly."); 
    etr.Reset(); 
    while(etr.MoveNext())  
     Console.WriteLine(etr.Key + ": " +  
                       etr.Value); 
     
  } 
}


           
         
    
     


Demonstrate an enumerator

image_pdfimage_print

/*
C#: The Complete Reference
by Herbert Schildt

Publisher: Osborne/McGraw-Hill (March 8, 2002)
ISBN: 0072134852
*/

// Demonstrate an enumerator.

using System;
using System.Collections;

public class EnumeratorDemo {
public static void Main() {
ArrayList list = new ArrayList(1);

for(int i=0; i < 10; i++) list.Add(i); // Use enumerator to access list. IEnumerator etr = list.GetEnumerator(); while(etr.MoveNext()) Console.Write(etr.Current + " "); Console.WriteLine(); // Re-enumerate the list. etr.Reset(); while(etr.MoveNext()) Console.Write(etr.Current + " "); Console.WriteLine(); } } [/csharp]

A public enum in one class from another class

image_pdfimage_print

   
  
/*
C# Programming Tips &amp; Techniques
by Charles Wright, Kris Jamsa

Publisher: Osborne/McGraw-Hill (December 28, 2001)
ISBN: 0072193794
*/
//
//  Enum.cs - Demonstrates using a public enum in one class from
//            another class
//
//             Compile this program with the following command line:
//                 C:>csc enum.cs
//
namespace nsEnum
{
    using System;
    public class Enum
    {
//  Define the enum type
        public enum Weekdays
        {
                Sun, Mon, Tues, Wed, Thurs, Fri, Sat, Count
        }
        static public void Main ()
        {
            clsSecond second = new clsSecond();
            second.ShowEnum ();
        }
    }
    class clsSecond
    {
        public void ShowEnum()
        {
//  Use the class name with the enum name
            Console.WriteLine ("Tuesday is day {0} in the week",
                                (int) Enum.Weekdays.Tues);
        }
    }
}


           
         
    
     


how a derived class may override an existing enumeration in a base class

image_pdfimage_print

   
  
/*
C# Programming Tips &amp; Techniques
by Charles Wright, Kris Jamsa

Publisher: Osborne/McGraw-Hill (December 28, 2001)
ISBN: 0072193794
*/

//
//  BaseEnum.cs - Demonstrates how a derived class may override an existing
//                enumeration in a base class
//
//             Compile this program with the following command line:
//                 C:>csc baseenum.cs
//
namespace nsEnum
{
    using System;
    public class clsBaseClass
    {
//  Define the enum type
        public enum Weekdays
        {
                Sun, Mon, Tues, Wed, Thurs, Fri, Sat
        }
        static public void Main ()
        {
            Console.WriteLine ("In base class, Sunday = " +
                               (int) Weekdays.Sun);
            clsNewClass second = new clsNewClass();
            second.ShowEnum ();
        }
    }
    class clsNewClass : clsBaseClass
    {
        public new enum Weekdays
        {
                Sun = 1, Mon, Tues, Wed, Thurs, Fri, Sat
        }
        public void ShowEnum()
        {
//  Use the class name with the enum name
            Console.WriteLine ("In derived class, Sunday = " +
                               (int) Weekdays.Sun);
        }
    }
}

           
         
    
     


Illustrates the use of an enumeration that defines the orbital periods of the first four planets in days, using a base type of long

image_pdfimage_print

   
  
/*
Mastering Visual C# .NET
by Jason Price, Mike Gunderloy

Publisher: Sybex;
ISBN: 0782129110
*/

/*
  Example2_12.cs illustrates the use of an enumeration
  that defines the orbital periods of the first four
  planets in days, using a base type of long
*/

public class Example2_121
{

  enum PlanetPeriods :long
  {
    Mercury = 88,
    Venus = 225,
    Earth = 365,
    Mars = 687
  }

  public static void Main()
  {

    System.Console.WriteLine("Orbital period for Mars = " +
      (long) PlanetPeriods.Mars + " days");

  }

}

           
         
    
     


Illustrates the use of an enumeration that defines the orbital periods of the first four planets in days

image_pdfimage_print

   
  
/*
Mastering Visual C# .NET
by Jason Price, Mike Gunderloy

Publisher: Sybex;
ISBN: 0782129110
*/
/*
  Example2_11.cs illustrates the use of an enumeration
  that defines the orbital periods of the first four
  planets in days
*/

public class Example2_111
{

  enum PlanetPeriods
  {
    Mercury = 88,
    Venus = 225,
    Earth = 365,
    Mars = 687
  }

  public static void Main()
  {

    System.Console.WriteLine("Orbital period for Mars = " +
      (int) PlanetPeriods.Mars + " days");

  }

}