15.6 Copying from a Collection Type to an ArrayThe 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( ) would return a new array containing the elements in the Stack. CopyTo( ) would copy the Stack over a preexisting array. Example 15-6 modifies Example 15-5 to demonstrate both methods. The listing is followed by a complete analysis. Example 15-6. Copying from Stack to an arrayOption Strict On Namespace StackDemo Class Tester Public Sub Run( ) Dim intStack As New Stack( ) ' populate the array Dim i As Integer For i = 1 To 4 intStack.Push((i * 5)) Next i ' Display the Stack. Console.WriteLine("intStack values:") DisplayValues(intStack) Const arraySize As Integer = 10 Dim testArray(arraySize) As Integer ' populate the array For i = 1 To arraySize - 1 testArray(i) = i * 100 Next i Console.WriteLine("Contents of the test array") DisplayValues(testArray) ' Copy the intStack into the new array, start offset 3 intStack.CopyTo(testArray, 3) Console.WriteLine("TestArray after copy: ") DisplayValues(testArray) ' Copy the entire source Stack ' to a new standard array. Dim myArray As Object( ) = intStack.ToArray( ) ' Display the values of the new standard array. Console.WriteLine("The new array:") DisplayValues(myArray) End Sub 'Run Public Shared Sub DisplayValues(ByVal myCollection As IEnumerable) Dim o As Object For Each o In myCollection Console.WriteLine(o) Next o End Sub 'DisplayValues Shared Sub Main( ) Dim t As New Tester( ) t.Run( ) End Sub 'Main End Class 'Tester End Namespace 'StackDemo Output: intStack values: 20 15 10 5 Contents of the test array 0 100 200 300 400 500 600 700 800 900 0 TestArray after copy: 0 100 200 20 15 10 5 700 800 900 0 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( ): Dim intStack As New Stack( ) ' populate the array Dim i As Integer For i = 1 To 4 intStack.Push((i * 5)) Next i ' Display the Stack. Console.WriteLine("intStack values:") DisplayValues(intStack) You next create an array, populate it, and display its values: Const arraySize As Integer = 10 Dim testArray(arraySize) As Integer ' populate the array For i = 1 To arraySize - 1 testArray(i) = i * 100 Next i Console.WriteLine("Contents 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. You do this with the ToArray( ) method, which generates a properly sized new array to hold the contents of the stack: Dim myArray As Object( ) = intStack.ToArray( ) |