Section 16.5. Copying from a Collection Type to an Array

   

16.5 Copying from a Collection Type to an Array

The ArrayList, Queue, and Stack types contain overloaded CopyTo() and ToArray() methods for copying their elements to an array. The CopyTo() method copies its elements to an existing one-dimensional array, overwriting the contents of the array beginning at the index you specify. The ToArray() method returns a new array with the contents of the type's elements.

For example, in the case of a stack, ToArray() returns a new array containing the elements in the stack, and CopyTo() copies the stack over a pre-existing array. Example 16-5 modifies Example 16-4 to demonstrate both methods. The listing is followed by a complete analysis.

Example 16-5. Copying from a Stack type to an array
 using System; using System.Collections; namespace StackDemo {    class Tester    {       public void Run()       {           Stack intStack = new Stack();           // populate the array           for (int i = 1;i<5;i++)           {               intStack.Push(i*5);           }           // Display the Stack.           Console.WriteLine( "intStack values:" );           DisplayValues( intStack );           const int arraySize = 10;           int[] testArray = new int[arraySize];           // populate the array           for (int i = 1; i < arraySize; i++)           {               testArray[i] = i * 100;           }           Console.WriteLine("\nContents of the test array");           DisplayValues( testArray );           // Copy the intStack into the new array, start offset 3           intStack.CopyTo( testArray, 3 );           Console.WriteLine( "\nTestArray after copy:  ");           DisplayValues( testArray );           // Copy the entire source Stack            // to a new standard array.           Object[] myArray = intStack.ToArray();           // Display the values of the new standard array.           Console.WriteLine( "\nThe new  array:" );           DisplayValues( myArray );       }        public static void DisplayValues(             IEnumerable myCollection )          {            foreach (object o in myCollection)            {                Console.WriteLine(o);            }        }       [STAThread]       static void Main()       {          Tester t = new Tester();          t.Run();       }    } }  Output:  intStack values: 20 15 10 5 Contents of the test array 0 100 200 300 400 500 600 700 800 900 TestArray after copy: 0 100 200 20 15 10 5 700 800 900 The new array: 20 15 10 5 

You begin again by creating the stack (intStack), populating it with integers and displaying its contents using WriteLine():

 Stack intStack = new Stack(); for (int i = 1;i<5;i++) {     intStack.Push(i*5); } Console.WriteLine( "intStack values:" ); DisplayValues( intStack ); 

Next create an array and populate the array and display its values:

 const int arraySize = 10; int[] testArray = new int[arraySize]; for (int i = 1; i < arraySize; i++) {     testArray[i] = i * 100; } Console.WriteLine("\nContents of the test array"); DisplayValues( testArray ); 

You are ready to copy the stack over the array. You do so with the CopyTo() method, passing in the array name and the offset at which to begin the copy:

 intStack.CopyTo( testArray, 3 ); 

This copies the four values from the stack over the array, starting at offset 3 (the fourth element in the array).

 0 100 200  20   15   10   5  700 800 900 

Rather than copying to an existing array, you are free to copy to a new array using the ToArray() method, which generates a properly sized new array to hold the contents of the stack:

 Object[] myArray = intStack.ToArray(); 
   


Learning C#
Learning C# 3.0
ISBN: 0596521065
EAN: 2147483647
Year: 2005
Pages: 178

flylib.com © 2008-2017.
If you may any questions please contact us: flylib@qtcs.net