Array.Copy Method
Definition
Important
Some information relates to prerelease product that may be substantially modified before it’s released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
Overloads
Copy(Array, Int64, Array, Int64, Int64) |
Copies a range of elements from an Array starting at the specified source index and pastes them to another Array starting at the specified destination index. The length and the indexes are specified as 64-bit integers. |
Copy(Array, Int32, Array, Int32, Int32) |
Copies a range of elements from an Array starting at the specified source index and pastes them to another Array starting at the specified destination index. The length and the indexes are specified as 32-bit integers. |
Copy(Array, Array, Int32) |
Copies a range of elements from an Array starting at the first element and pastes them into another Array starting at the first element. The length is specified as a 32-bit integer. |
Copy(Array, Array, Int64) |
Copies a range of elements from an Array starting at the first element and pastes them into another Array starting at the first element. The length is specified as a 64-bit integer. |
Examples
The following code example shows how to copy from one Array of type Object to another Array of type integer.
using namespace System;
void PrintValues( Array^ myArr );
void main()
{
// Creates and initializes a new Array instance of type Int32.
Array^ myIntArray = Array::CreateInstance( Type::GetType( "System.Int32" ), 5 );
for ( int i = myIntArray->GetLowerBound( 0 ); i <= myIntArray->GetUpperBound( 0 ); i++ )
myIntArray->SetValue( i + 1, i );
// Creates and initializes a new Array instance of type Object.
Array^ myObjArray = Array::CreateInstance( Type::GetType( "System.Object" ), 5 );
for ( int i = myObjArray->GetLowerBound( 0 ); i <= myObjArray->GetUpperBound( 0 ); i++ )
myObjArray->SetValue( i + 26, i );
// Displays the initial values of both arrays.
Console::WriteLine( "Int32 array:" );
PrintValues( myIntArray );
Console::WriteLine( "Object array:" );
PrintValues( myObjArray );
// Copies the first element from the Int32 array to the Object array.
Array::Copy( myIntArray, myIntArray->GetLowerBound( 0 ), myObjArray, myObjArray->GetLowerBound( 0 ), 1 );
// Copies the last two elements from the Object array to the Int32 array.
Array::Copy( myObjArray, myObjArray->GetUpperBound( 0 ) - 1, myIntArray, myIntArray->GetUpperBound( 0 ) - 1, 2 );
// Displays the values of the modified arrays.
Console::WriteLine( "Int32 array - Last two elements should now be the same as Object array:" );
PrintValues( myIntArray );
Console::WriteLine( "Object array - First element should now be the same as Int32 array:" );
PrintValues( myObjArray );
}
void PrintValues( Array^ myArr )
{
System::Collections::IEnumerator^ myEnumerator = myArr->GetEnumerator();
int i = 0;
int cols = myArr->GetLength( myArr->Rank - 1 );
while ( myEnumerator->MoveNext() )
{
if ( i < cols )
{
i++;
}
else
{
Console::WriteLine();
i = 1;
}
Console::Write( "\t{0}", myEnumerator->Current );
}
Console::WriteLine();
}
/*
This code produces the following output.
Int32 array:
1 2 3 4 5
Object array:
26 27 28 29 30
Int32 array - Last two elements should now be the same as Object array:
1 2 3 29 30
Object array - First element should now be the same as Int32 array:
1 27 28 29 30
*/
open System
let printValues (myArr: 'a []) =
let mutable i = 0;
let cols = myArr.GetLength(myArr.Rank - 1)
for item in myArr do
if i < cols then
i <- i + 1
else
printfn ""
i <- 1
printf $"\t{item}"
printfn ""
// Creates and initializes a new Array of type int.
let myIntArray = [| 1..5 |]
// Creates and initializes a new Array of type Object.
let myObjArray = Array.init 5 (fun i -> i + 26 :> obj)
// Displays the initial values of both arrays.
printfn "int array:"
printValues myIntArray
printfn "Object array:"
printValues myObjArray
// Copies the first element from the int array to the Object array.
Array.Copy(myIntArray, myIntArray.GetLowerBound 0, myObjArray, myObjArray.GetLowerBound 0, 1)
// Copies the last two elements from the Object array to the int array.
Array.Copy(myObjArray, myObjArray.GetUpperBound 0 - 1, myIntArray, myIntArray.GetUpperBound 0 - 1, 2)
// Displays the values of the modified arrays.
printfn "int array - Last two elements should now be the same as Object array:"
printValues myIntArray
printfn "Object array - First element should now be the same as int array:"
printValues myObjArray
// This code produces the following output.
// int array:
// 1 2 3 4 5
// Object array:
// 26 27 28 29 30
// int array - Last two elements should now be the same as Object array:
// 1 2 3 29 30
// Object array - First element should now be the same as int array:
// 1 27 28 29 30
using System;
public class SamplesArray {
public static void Main() {
// Creates and initializes a new Array of type int.
Array myIntArray=Array.CreateInstance( typeof(System.Int32), 5 );
for ( int i = myIntArray.GetLowerBound(0); i <= myIntArray.GetUpperBound(0); i++ )
myIntArray.SetValue( i+1, i );
// Creates and initializes a new Array of type Object.
Array myObjArray = Array.CreateInstance( typeof(System.Object), 5 );
for ( int i = myObjArray.GetLowerBound(0); i <= myObjArray.GetUpperBound(0); i++ )
myObjArray.SetValue( i+26, i );
// Displays the initial values of both arrays.
Console.WriteLine( "int array:" );
PrintValues( myIntArray );
Console.WriteLine( "Object array:" );
PrintValues( myObjArray );
// Copies the first element from the int array to the Object array.
Array.Copy( myIntArray, myIntArray.GetLowerBound(0), myObjArray, myObjArray.GetLowerBound(0), 1 );
// Copies the last two elements from the Object array to the int array.
Array.Copy( myObjArray, myObjArray.GetUpperBound(0) - 1, myIntArray, myIntArray.GetUpperBound(0) - 1, 2 );
// Displays the values of the modified arrays.
Console.WriteLine( "int array - Last two elements should now be the same as Object array:" );
PrintValues( myIntArray );
Console.WriteLine( "Object array - First element should now be the same as int array:" );
PrintValues( myObjArray );
}
public static void PrintValues( Array myArr ) {
System.Collections.IEnumerator myEnumerator = myArr.GetEnumerator();
int i = 0;
int cols = myArr.GetLength( myArr.Rank - 1 );
while ( myEnumerator.MoveNext() ) {
if ( i < cols ) {
i++;
} else {
Console.WriteLine();
i = 1;
}
Console.Write( "\t{0}", myEnumerator.Current );
}
Console.WriteLine();
}
}
/*
This code produces the following output.
int array:
1 2 3 4 5
Object array:
26 27 28 29 30
int array - Last two elements should now be the same as Object array:
1 2 3 29 30
Object array - First element should now be the same as int array:
1 27 28 29 30
*/
Public Class SamplesArray
Public Shared Sub Main()
' Creates and initializes a new Array of type Int32.
Dim myIntArray As Array = _
Array.CreateInstance(GetType(System.Int32), 5)
Dim i As Integer
For i = myIntArray.GetLowerBound(0) To myIntArray.GetUpperBound(0)
myIntArray.SetValue(i + 1, i)
Next i
' Creates and initializes a new Array of type Object.
Dim myObjArray As Array = _
Array.CreateInstance(GetType(System.Object), 5)
For i = myObjArray.GetLowerBound(0) To myObjArray.GetUpperBound(0)
myObjArray.SetValue(i + 26, i)
Next i
' Displays the initial values of both arrays.
Console.WriteLine("Int32 array:")
PrintValues(myIntArray)
Console.WriteLine("Object array:")
PrintValues(myObjArray)
' Copies the first element from the Int32 array to the Object array.
Array.Copy(myIntArray, myIntArray.GetLowerBound(0), myObjArray, _
myObjArray.GetLowerBound(0), 1)
' Copies the last two elements from the Object array to the Int32 array.
Array.Copy(myObjArray, myObjArray.GetUpperBound(0) - 1, myIntArray, _
myIntArray.GetUpperBound(0) - 1, 2)
' Displays the values of the modified arrays.
Console.WriteLine("Int32 array - Last two elements should now be " _
+ "the same as Object array:")
PrintValues(myIntArray)
Console.WriteLine("Object array - First element should now be the " _
+ "same as Int32 array:")
PrintValues(myObjArray)
End Sub
Public Shared Sub PrintValues(myArr As Array)
Dim myEnumerator As System.Collections.IEnumerator = _
myArr.GetEnumerator()
Dim i As Integer = 0
Dim cols As Integer = myArr.GetLength((myArr.Rank - 1))
While myEnumerator.MoveNext()
If i < cols Then
i += 1
Else
Console.WriteLine()
i = 1
End If
Console.Write(ControlChars.Tab + "{0}", myEnumerator.Current)
End While
Console.WriteLine()
End Sub
End Class
' This code produces the following output.
'
' Int32 array:
' 1 2 3 4 5
' Object array:
' 26 27 28 29 30
' Int32 array - Last two elements should now be the same as Object array:
' 1 2 3 29 30
' Object array - First element should now be the same as Int32 array:
' 1 27 28 29 30
Copy(Array, Int64, Array, Int64, Int64)
- Source:
- Array.cs
- Source:
- Array.cs
- Source:
- Array.cs
public:
static void Copy(Array ^ sourceArray, long sourceIndex, Array ^ destinationArray, long destinationIndex, long length);
public static void Copy (Array sourceArray, long sourceIndex, Array destinationArray, long destinationIndex, long length);
static member Copy : Array * int64 * Array * int64 * int64 -> unit
Public Shared Sub Copy (sourceArray As Array, sourceIndex As Long, destinationArray As Array, destinationIndex As Long, length As Long)
Parameters
- sourceIndex
- Int64
A 64-bit integer that represents the index in the sourceArray
at which copying begins.
- destinationIndex
- Int64
A 64-bit integer that represents the index in the destinationArray
at which storing begins.
- length
- Int64
A 64-bit integer that represents the number of elements to copy. The integer must be between zero and Int32.MaxValue, inclusive.
Exceptions
sourceArray
and destinationArray
have different ranks.
sourceArray
and destinationArray
are of incompatible types.
At least one element in sourceArray
cannot be cast to the type of destinationArray
.
sourceIndex
is outside the range of valid indexes for the sourceArray
.
-or-
destinationIndex
is outside the range of valid indexes for the destinationArray
.
-or-
length
is less than 0 or greater than Int32.MaxValue.
length
is greater than the number of elements from sourceIndex
to the end of sourceArray
.
-or-
length
is greater than the number of elements from destinationIndex
to the end of destinationArray
.
Remarks
The sourceArray
and destinationArray
parameters must have the same number of dimensions. In addition, destinationArray
must already have been dimensioned and must have a sufficient number of elements starting from the destinationIndex
position to accommodate the copied data.
When copying between multidimensional arrays, the array behaves like a long one-dimensional array, where the rows (or columns) are conceptually laid end-to-end. For example, if an array has three rows (or columns) with four elements each, copying six elements from the beginning of the array would copy all four elements of the first row (or column) and the first two elements of the second row (or column). To start copying from the second element of the third row (or column), sourceIndex
must be the upper bound of the first row (or column) plus the length of the second row (or column) plus two.
If sourceArray
and destinationArray
overlap, this method behaves as if the original values of sourceArray
were preserved in a temporary location before destinationArray
is overwritten.
[C++]
This method is equivalent to the standard C/C++ function memmove
, not memcpy
.
The arrays can be reference-type arrays or value-type arrays. Type downcasting is performed, as required.
When copying from a reference-type array to a value-type array, each element is unboxed and then copied. When copying from a value-type array to a reference-type array, each element is boxed and then copied.
When copying from a reference-type or value-type array to an Object array, an Object is created to hold each value or reference and then copied. When copying from an Object array to a reference-type or value-type array and the assignment is not possible, an InvalidCastException is thrown.
If
sourceArray
anddestinationArray
are both reference-type arrays or are both arrays of type Object, a shallow copy is performed. A shallow copy of an Array is a new Array containing references to the same elements as the original Array. The elements themselves or anything referenced by the elements are not copied. In contrast, a deep copy of an Array copies the elements and everything directly or indirectly referenced by the elements.
An ArrayTypeMismatchException is thrown if the arrays are of incompatible types. Type compatibility is defined as follows:
A type is compatible with itself.
A value type is compatible with Object and with an interface type implemented by that value type. A value type is considered connected to an interface only if it implements that interface directly. Disconnected types are not compatible.
Two intrinsic (predefined) value types are compatible if copying from the source type to the destination type is a widening conversion. A widening conversion never loses information, whereas a narrowing conversion can lose information. For example, converting a 32-bit signed integer to a 64-bit signed integer is a widening conversion, and converting a 64-bit signed integer to a 32-bit signed integer is a narrowing conversion. For more information about conversions, see Convert.
A nonintrinsic (user-defined) value type is compatible only with itself.
Enumerations have an implicit conversion to Enum and to their underlying type.
If every element in sourceArray
requires a downcast (for example, from a base class to a derived class or from an interface to an object) and one or more elements cannot be cast to the corresponding type in destinationArray
, an InvalidCastException is thrown.
If this method throws an exception while copying, the state of destinationArray
is undefined.
This method is an O(n
) operation, where n
is length
.
See also
Applies to
Copy(Array, Int32, Array, Int32, Int32)
- Source:
- Array.CoreCLR.cs
- Source:
- Array.cs
- Source:
- Array.cs
public:
static void Copy(Array ^ sourceArray, int sourceIndex, Array ^ destinationArray, int destinationIndex, int length);
public static void Copy (Array sourceArray, int sourceIndex, Array destinationArray, int destinationIndex, int length);
static member Copy : Array * int * Array * int * int -> unit
Public Shared Sub Copy (sourceArray As Array, sourceIndex As Integer, destinationArray As Array, destinationIndex As Integer, length As Integer)
Parameters
- sourceIndex
- Int32
A 32-bit integer that represents the index in the sourceArray
at which copying begins.
- destinationIndex
- Int32
A 32-bit integer that represents the index in the destinationArray
at which storing begins.
- length
- Int32
A 32-bit integer that represents the number of elements to copy.
Exceptions
sourceArray
and destinationArray
have different ranks.
sourceArray
and destinationArray
are of incompatible types.
At least one element in sourceArray
cannot be cast to the type of destinationArray
.
sourceIndex
is less than the lower bound of the first dimension of sourceArray
.
-or-
destinationIndex
is less than the lower bound of the first dimension of destinationArray
.
-or-
length
is less than zero.
length
is greater than the number of elements from sourceIndex
to the end of sourceArray
.
-or-
length
is greater than the number of elements from destinationIndex
to the end of destinationArray
.
Remarks
The sourceArray
and destinationArray
parameters must have the same number of dimensions. In addition, destinationArray
must already have been dimensioned and must have a sufficient number of elements starting from the destinationIndex
position to accommodate the copied data.
When copying between multidimensional arrays, the array behaves like a long one-dimensional array, where the rows (or columns) are conceptually laid end-to-end. For example, if an array has three rows (or columns) with four elements each, copying six elements from the beginning of the array would copy all four elements of the first row (or column) and the first two elements of the second row (or column). To start copying from the second element of the third row (or column), sourceIndex
must be the upper bound of the first row (or column) plus the length of the second row (or column) plus two.
If sourceArray
and destinationArray
overlap, this method behaves as if the original values of sourceArray
were preserved in a temporary location before destinationArray
is overwritten.
[C++]
This method is equivalent to the standard C/C++ function memmove
, not memcpy
.
The arrays can be reference-type arrays or value-type arrays. Type downcasting is performed, as required.
When copying from a reference-type array to a value-type array, each element is unboxed and then copied. When copying from a value-type array to a reference-type array, each element is boxed and then copied.
When copying from a reference-type or value-type array to an Object array, an Object is created to hold each value or reference and then copied. When copying from an Object array to a reference-type or value-type array and the assignment is not possible, an InvalidCastException is thrown.
If
sourceArray
anddestinationArray
are both reference-type arrays or are both arrays of type Object, a shallow copy is performed. A shallow copy of an Array is a new Array containing references to the same elements as the original Array. The elements themselves or anything referenced by the elements are not copied. In contrast, a deep copy of an Array copies the elements and everything directly or indirectly referenced by the elements.
An ArrayTypeMismatchException is thrown if the arrays are of incompatible types. Type compatibility is defined as follows:
A type is compatible with itself.
A value type is compatible with Object and with an interface type implemented by that value type. A value type is considered connected to an interface only if it implements that interface directly. Disconnected types are not compatible.
Two intrinsic (predefined) value types are compatible if copying from the source type to the destination type is a widening conversion. A widening conversion never loses information, whereas a narrowing conversion can lose information. For example, converting a 32-bit signed integer to a 64-bit signed integer is a widening conversion, and converting a 64-bit signed integer to a 32-bit signed integer is a narrowing conversion. For more information about conversions, see Convert.
A nonintrinsic (user-defined) value type is compatible only with itself.
Enumerations have an implicit conversion to Enum and to their underlying type.
If every element in sourceArray
requires a downcast (for example, from a base class to a derived class or from an interface to an object) and one or more elements cannot be cast to the corresponding type in destinationArray
, an InvalidCastException is thrown.
If this method throws an exception while copying, the state of destinationArray
is undefined.
This method is an O(n
) operation, where n
is length
.
See also
Applies to
Copy(Array, Array, Int32)
- Source:
- Array.CoreCLR.cs
- Source:
- Array.cs
- Source:
- Array.cs
public:
static void Copy(Array ^ sourceArray, Array ^ destinationArray, int length);
public static void Copy (Array sourceArray, Array destinationArray, int length);
static member Copy : Array * Array * int -> unit
Public Shared Sub Copy (sourceArray As Array, destinationArray As Array, length As Integer)
Parameters
- length
- Int32
A 32-bit integer that represents the number of elements to copy.
Exceptions
sourceArray
and destinationArray
have different ranks.
sourceArray
and destinationArray
are of incompatible types.
At least one element in sourceArray
cannot be cast to the type of destinationArray
.
length
is less than zero.
length
is greater than the number of elements in sourceArray
.
-or-
length
is greater than the number of elements in destinationArray
.
Remarks
The sourceArray
and destinationArray
parameters must have the same number of dimensions. In addition, destinationArray
must already have been dimensioned and must have a sufficient number of elements to accommodate the copied data.
When copying between multidimensional arrays, the array behaves like a long one-dimensional array, where the rows (or columns) are conceptually laid end to end. For example, if an array has three rows (or columns) with four elements each, copying six elements from the beginning of the array would copy all four elements of the first row (or column) and the first two elements of the second row (or column).
If sourceArray
and destinationArray
overlap, this method behaves as if the original values of sourceArray
were preserved in a temporary location before destinationArray
is overwritten.
[C++]
This method is equivalent to the standard C/C++ function memmove
, not memcpy
.
The arrays can be reference-type arrays or value-type arrays. Type downcasting is performed, as required.
When copying from a reference-type array to a value-type array, each element is unboxed and then copied. When copying from a value-type array to a reference-type array, each element is boxed and then copied.
When copying from a reference-type or value-type array to an Object array, an Object is created to hold each value or reference and then copied. When copying from an Object array to a reference-type or value-type array and the assignment is not possible, an InvalidCastException is thrown.
If
sourceArray
anddestinationArray
are both reference-type arrays or are both arrays of type Object, a shallow copy is performed. A shallow copy of an Array is a new Array containing references to the same elements as the original Array. The elements themselves or anything referenced by the elements are not copied. In contrast, a deep copy of an Array copies the elements and everything directly or indirectly referenced by the elements.
An ArrayTypeMismatchException is thrown if the arrays are of incompatible types. Type compatibility is defined as follows:
A type is compatible with itself.
A value type is compatible with Object and with an interface type implemented by that value type. A value type is considered connected to an interface only if it implements that interface directly. Disconnected types are not compatible.
Two intrinsic (predefined) value types are compatible if copying from the source type to the destination type is a widening conversion. A widening conversion never loses information, whereas a narrowing conversion can lose information. For example, converting a 32-bit signed integer to a 64-bit signed integer is a widening conversion, and converting a 64-bit signed integer to a 32-bit signed integer is a narrowing conversion. For more information about conversions, see Convert.
A nonintrinsic (user-defined) value type is compatible only with itself.
Enumerations have an implicit conversion to Enum and to their underlying type.
If every element in sourceArray
requires a downcast (for example, from a base class to a derived class or from an interface to an object) and one or more elements cannot be cast to the corresponding type in destinationArray
, an InvalidCastException is thrown.
If this method throws an exception while copying, the state of destinationArray
is undefined.
This method is an O(n
) operation, where n
is length
.
See also
Applies to
Copy(Array, Array, Int64)
- Source:
- Array.cs
- Source:
- Array.cs
- Source:
- Array.cs
public:
static void Copy(Array ^ sourceArray, Array ^ destinationArray, long length);
public static void Copy (Array sourceArray, Array destinationArray, long length);
static member Copy : Array * Array * int64 -> unit
Public Shared Sub Copy (sourceArray As Array, destinationArray As Array, length As Long)
Parameters
- length
- Int64
A 64-bit integer that represents the number of elements to copy. The integer must be between zero and Int32.MaxValue, inclusive.
Exceptions
sourceArray
and destinationArray
have different ranks.
sourceArray
and destinationArray
are of incompatible types.
At least one element in sourceArray
cannot be cast to the type of destinationArray
.
length
is less than 0 or greater than Int32.MaxValue.
length
is greater than the number of elements in sourceArray
.
-or-
length
is greater than the number of elements in destinationArray
.
Remarks
The sourceArray
and destinationArray
parameters must have the same number of dimensions. In addition, destinationArray
must already have been dimensioned and must have a sufficient number of elements to accommodate the copied data.
When copying between multidimensional arrays, the array behaves like a long one-dimensional array, where the rows (or columns) are conceptually laid end to end. For example, if an array has three rows (or columns) with four elements each, copying six elements from the beginning of the array would copy all four elements of the first row (or column) and the first two elements of the second row (or column).
If sourceArray
and destinationArray
overlap, this method behaves as if the original values of sourceArray
were preserved in a temporary location before destinationArray
is overwritten.
[C++]
This method is equivalent to the standard C/C++ function memmove
, not memcpy
.
The arrays can be reference-type arrays or value-type arrays. Type downcasting is performed, as required.
When copying from a reference-type array to a value-type array, each element is unboxed and then copied. When copying from a value-type array to a reference-type array, each element is boxed and then copied.
When copying from a reference-type or value-type array to an Object array, an Object is created to hold each value or reference and then copied. When copying from an Object array to a reference-type or value-type array and the assignment is not possible, an InvalidCastException is thrown.
If
sourceArray
anddestinationArray
are both reference-type arrays or are both arrays of type Object, a shallow copy is performed. A shallow copy of an Array is a new Array containing references to the same elements as the original Array. The elements themselves or anything referenced by the elements are not copied. In contrast, a deep copy of an Array copies the elements and everything directly or indirectly referenced by the elements.
An ArrayTypeMismatchException is thrown if the arrays are of incompatible types. Type compatibility is defined as follows:
A type is compatible with itself.
A value type is compatible with Object and with an interface type implemented by that value type. A value type is considered connected to an interface only if it implements that interface directly. Disconnected types are not compatible.
Two intrinsic (predefined) value types are compatible if copying from the source type to the destination type is a widening conversion. A widening conversion never loses information, whereas a narrowing conversion can lose information. For example, converting a 32-bit signed integer to a 64-bit signed integer is a widening conversion, and converting a 64-bit signed integer to a 32-bit signed integer is a narrowing conversion. For more information about conversions, see Convert.
A nonintrinsic (user-defined) value type is compatible only with itself.
Enumerations have an implicit conversion to Enum and to their underlying type.
If every element in sourceArray
requires a downcast (for example, from a base class to a derived class or from an interface to an object) and one or more elements cannot be cast to the corresponding type in destinationArray
, an InvalidCastException is thrown.
If this method throws an exception while copying, the state of destinationArray
is undefined.
This method is an O(n
) operation, where n
is length
.