Array.Copy Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Перегрузки
| Имя | Описание |
|---|---|
| Copy(Array, Int64, Array, Int64, Int64) |
Копирует диапазон элементов начиная с указанного исходного индекса и вставляет их в другойArray, начиная с Array указанного целевого индекса. Длина и индексы указываются как 64-разрядные целые числа. |
| Copy(Array, Int32, Array, Int32, Int32) |
Копирует диапазон элементов начиная с указанного исходного индекса и вставляет их в другойArray, начиная с Array указанного целевого индекса. Длина и индексы указываются как 32-разрядные целые числа. |
| Copy(Array, Array, Int32) |
Копирует диапазон элементов из первого элемента и вставляет их в другойArray, начиная с Array первого элемента. Длина указывается как 32-разрядное целое число. |
| Copy(Array, Array, Int64) |
Копирует диапазон элементов из первого элемента и вставляет их в другойArray, начиная с Array первого элемента. Длина указывается как 64-разрядное целое число. |
Примеры
В следующем примере кода показано, как скопировать одно Array из типов Object в другое Array целое число типа.
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)
- Исходный код:
- Array.cs
- Исходный код:
- Array.cs
- Исходный код:
- Array.cs
- Исходный код:
- Array.cs
- Исходный код:
- 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)
Параметры
- sourceIndex
- Int64
64-разрядное целое число, представляющее индекс, с sourceArray которого начинается копирование.
- destinationIndex
- Int64
64-разрядное целое число, представляющее индекс, с destinationArray которого начинается хранение.
- length
- Int64
64-разрядное целое число, представляющее количество элементов для копирования. Целое число должно быть от нуля до Int32.MaxValue включительно.
Исключения
sourceArray и destinationArray имеют разные ряды.
sourceArray и destinationArray являются несовместимыми типами.
По крайней мере один элемент в sourceArray не может быть приведение к типу destinationArray.
sourceIndexнаходится за пределами диапазона допустимых индексов для .sourceArray
–или–
destinationIndexнаходится за пределами диапазона допустимых индексов для .destinationArray
–или–
length значение меньше 0 или больше , чем Int32.MaxValue.
length больше, чем число элементов от sourceIndex конца до конца sourceArray.
–или–
length больше, чем число элементов от destinationIndex конца до конца destinationArray.
Комментарии
sourceArray Параметры destinationArray должны иметь одинаковое количество измерений. Кроме того, должно быть уже измерено и должно быть достаточное количество элементов, destinationArray начиная с destinationIndex позиции для размещения скопированных данных.
При копировании между многомерными массивами массив ведет себя как длинный одномерный массив, где строки (или столбцы) концептуально размещаются в конце. Например, если массив содержит три строки (или столбцы) с четырьмя элементами, копирование шести элементов из начала массива будет копировать все четыре элемента первой строки (или столбец) и первые два элемента второй строки (или столбец). Чтобы начать копирование из второго элемента третьей строки (или столбца), sourceIndex должна быть верхняя граница первой строки (или столбца) плюс длина второй строки (или столбца) плюс две.
Если sourceArray и destinationArray перекрываются, этот метод ведет себя так, как если бы исходные значения sourceArray сохранялись во временном расположении перед destinationArray перезаписи.
[C++]
Этот метод эквивалентен стандартной функции memmoveC/C++, а не memcpy.
Массивы могут быть массивами ссылочных типов или массивами типов значений. При необходимости выполняется переадресивание типов.
При копировании из массива ссылочного типа в массив типа значений каждый элемент распаковается, а затем копируется. При копировании из массива типа значений в массив ссылочного типа каждый элемент упаковается, а затем копируется.
При копировании из массива ссылочного или типа значений в массив ObjectObject создается для хранения каждого значения или ссылки, а затем копируется. При копировании из массива в Object массив ссылочного типа или массив типа значений и назначение невозможно, InvalidCastException создается исключение.
Если
sourceArrayиdestinationArrayоба массива ссылочного типа или оба массива типа Object, выполняется неглубокая копия. Неглубокая копия Array является новой Array , содержащей ссылки на те же элементы, что и исходный Array. Сами элементы или все, на которые ссылаются элементы, не копируются. В отличие от этого, глубокая копия Array элементов копирует элементы и все, прямо или косвенно на которые ссылаются элементы.
Вызывается ArrayTypeMismatchException , если массивы имеют несовместимые типы. Совместимость типов определяется следующим образом:
Тип совместим с собой.
Тип значения совместим с Object типом интерфейса, реализованным этим типом значения. Тип значения считается подключенным к интерфейсу только в том случае, если он реализует этот интерфейс напрямую. Отключенные типы несовместимы.
Два встроенных (предопределенных) типа значений совместимы, если копирование из исходного типа в целевой тип является расширением преобразования. Расширение преобразования никогда не теряет информацию, в то время как сужающее преобразование может потерять информацию. Например, преобразование 32-разрядного целого числа со знаком в 64-разрядное целое число со знаком является расширением преобразования и преобразованием 64-разрядного целого числа со знаком в 32-разрядное целое число со знаком является сужающим преобразованием. Дополнительные сведения о преобразованиях см. в разделе Convert.
Тип неинтринсического (определяемого пользователем) значения совместим только с самим собой.
Перечисления имеют неявное преобразование в Enum их базовый тип и в него.
Если каждому элементу требуется sourceArray даункаст (например, из базового класса в производный класс или из интерфейса к объекту) и один или несколько элементов не могут быть приведение к соответствующему типу в destinationArray, InvalidCastException создается исключение.
Если этот метод создает исключение при копировании, состояние destinationArray не определено.
Этот метод представляет собой операцию O(n), где n находится length.
См. также раздел
Применяется к
Copy(Array, Int32, Array, Int32, Int32)
- Исходный код:
- Array.cs
- Исходный код:
- Array.cs
- Исходный код:
- Array.CoreCLR.cs
- Исходный код:
- Array.cs
- Исходный код:
- 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)
Параметры
- sourceIndex
- Int32
32-разрядное целое число, представляющее индекс, с sourceArray которого начинается копирование.
- destinationIndex
- Int32
32-разрядное целое число, представляющее индекс, с destinationArray которого начинается хранение.
- length
- Int32
32-разрядное целое число, представляющее количество элементов для копирования.
Исключения
sourceArray и destinationArray имеют разные ряды.
sourceArray и destinationArray являются несовместимыми типами.
По крайней мере один элемент в sourceArray не может быть приведение к типу destinationArray.
sourceIndex меньше нижней границы первого измерения sourceArray.
–или–
destinationIndex меньше нижней границы первого измерения destinationArray.
–или–
length меньше нуля.
length больше, чем число элементов от sourceIndex конца до конца sourceArray.
–или–
length больше, чем число элементов от destinationIndex конца до конца destinationArray.
Комментарии
sourceArray Параметры destinationArray должны иметь одинаковое количество измерений. Кроме того, должно быть уже измерено и должно быть достаточное количество элементов, destinationArray начиная с destinationIndex позиции для размещения скопированных данных.
При копировании между многомерными массивами массив ведет себя как длинный одномерный массив, где строки (или столбцы) концептуально размещаются в конце. Например, если массив содержит три строки (или столбцы) с четырьмя элементами, копирование шести элементов из начала массива будет копировать все четыре элемента первой строки (или столбец) и первые два элемента второй строки (или столбец). Чтобы начать копирование из второго элемента третьей строки (или столбца), sourceIndex должна быть верхняя граница первой строки (или столбца) плюс длина второй строки (или столбца) плюс две.
Если sourceArray и destinationArray перекрываются, этот метод ведет себя так, как если бы исходные значения sourceArray сохранялись во временном расположении перед destinationArray перезаписи.
[C++]
Этот метод эквивалентен стандартной функции memmoveC/C++, а не memcpy.
Массивы могут быть массивами ссылочных типов или массивами типов значений. При необходимости выполняется переадресивание типов.
При копировании из массива ссылочного типа в массив типа значений каждый элемент распаковается, а затем копируется. При копировании из массива типа значений в массив ссылочного типа каждый элемент упаковается, а затем копируется.
При копировании из массива ссылочного или типа значений в массив ObjectObject создается для хранения каждого значения или ссылки, а затем копируется. При копировании из массива в Object массив ссылочного типа или массив типа значений и назначение невозможно, InvalidCastException создается исключение.
Если
sourceArrayиdestinationArrayоба массива ссылочного типа или оба массива типа Object, выполняется неглубокая копия. Неглубокая копия Array является новой Array , содержащей ссылки на те же элементы, что и исходный Array. Сами элементы или все, на которые ссылаются элементы, не копируются. В отличие от этого, глубокая копия Array элементов копирует элементы и все, прямо или косвенно на которые ссылаются элементы.
Вызывается ArrayTypeMismatchException , если массивы имеют несовместимые типы. Совместимость типов определяется следующим образом:
Тип совместим с собой.
Тип значения совместим с Object типом интерфейса, реализованным этим типом значения. Тип значения считается подключенным к интерфейсу только в том случае, если он реализует этот интерфейс напрямую. Отключенные типы несовместимы.
Два встроенных (предопределенных) типа значений совместимы, если копирование из исходного типа в целевой тип является расширением преобразования. Расширение преобразования никогда не теряет информацию, в то время как сужающее преобразование может потерять информацию. Например, преобразование 32-разрядного целого числа со знаком в 64-разрядное целое число со знаком является расширением преобразования и преобразованием 64-разрядного целого числа со знаком в 32-разрядное целое число со знаком является сужающим преобразованием. Дополнительные сведения о преобразованиях см. в разделе Convert.
Тип неинтринсического (определяемого пользователем) значения совместим только с самим собой.
Перечисления имеют неявное преобразование в Enum их базовый тип и в него.
Если каждому элементу требуется sourceArray даункаст (например, из базового класса в производный класс или из интерфейса к объекту) и один или несколько элементов не могут быть приведение к соответствующему типу в destinationArray, InvalidCastException создается исключение.
Если этот метод создает исключение при копировании, состояние destinationArray не определено.
Этот метод представляет собой операцию O(n), где n находится length.
См. также раздел
Применяется к
Copy(Array, Array, Int32)
- Исходный код:
- Array.cs
- Исходный код:
- Array.cs
- Исходный код:
- Array.CoreCLR.cs
- Исходный код:
- Array.cs
- Исходный код:
- 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)
Параметры
- length
- Int32
32-разрядное целое число, представляющее количество элементов для копирования.
Исключения
sourceArray и destinationArray имеют разные ряды.
sourceArray и destinationArray являются несовместимыми типами.
По крайней мере один элемент в sourceArray не может быть приведение к типу destinationArray.
length меньше нуля.
length больше числа элементов в sourceArray.
–или–
length больше числа элементов в destinationArray.
Комментарии
sourceArray Параметры destinationArray должны иметь одинаковое количество измерений. Кроме того, destinationArray должно быть уже измерено и должно быть достаточно элементов для размещения скопированных данных.
При копировании между многомерными массивами массив ведет себя как длинный одномерный массив, где строки (или столбцы) концептуально размещаются в конце. Например, если массив содержит три строки (или столбцы) с четырьмя элементами, копирование шести элементов из начала массива будет копировать все четыре элемента первой строки (или столбец) и первые два элемента второй строки (или столбец).
Если sourceArray и destinationArray перекрываются, этот метод ведет себя так, как если бы исходные значения sourceArray сохранялись во временном расположении перед destinationArray перезаписи.
[C++]
Этот метод эквивалентен стандартной функции memmoveC/C++, а не memcpy.
Массивы могут быть массивами ссылочных типов или массивами типов значений. При необходимости выполняется переадресивание типов.
При копировании из массива ссылочного типа в массив типа значений каждый элемент распаковается, а затем копируется. При копировании из массива типа значений в массив ссылочного типа каждый элемент упаковается, а затем копируется.
При копировании из массива ссылочного или типа значений в массив ObjectObject создается для хранения каждого значения или ссылки, а затем копируется. При копировании из массива в Object массив ссылочного типа или массив типа значений и назначение невозможно, InvalidCastException создается исключение.
Если
sourceArrayиdestinationArrayоба массива ссылочного типа или оба массива типа Object, выполняется неглубокая копия. Неглубокая копия Array является новой Array , содержащей ссылки на те же элементы, что и исходный Array. Сами элементы или все, на которые ссылаются элементы, не копируются. В отличие от этого, глубокая копия Array элементов копирует элементы и все, прямо или косвенно на которые ссылаются элементы.
Вызывается ArrayTypeMismatchException , если массивы имеют несовместимые типы. Совместимость типов определяется следующим образом:
Тип совместим с собой.
Тип значения совместим с Object типом интерфейса, реализованным этим типом значения. Тип значения считается подключенным к интерфейсу только в том случае, если он реализует этот интерфейс напрямую. Отключенные типы несовместимы.
Два встроенных (предопределенных) типа значений совместимы, если копирование из исходного типа в целевой тип является расширением преобразования. Расширение преобразования никогда не теряет информацию, в то время как сужающее преобразование может потерять информацию. Например, преобразование 32-разрядного целого числа со знаком в 64-разрядное целое число со знаком является расширением преобразования и преобразованием 64-разрядного целого числа со знаком в 32-разрядное целое число со знаком является сужающим преобразованием. Дополнительные сведения о преобразованиях см. в разделе Convert.
Тип неинтринсического (определяемого пользователем) значения совместим только с самим собой.
Перечисления имеют неявное преобразование в Enum их базовый тип и в него.
Если каждому элементу требуется sourceArray даункаст (например, из базового класса в производный класс или из интерфейса к объекту) и один или несколько элементов не могут быть приведение к соответствующему типу в destinationArray, InvalidCastException создается исключение.
Если этот метод создает исключение при копировании, состояние destinationArray не определено.
Этот метод представляет собой операцию O(n), где n находится length.
См. также раздел
Применяется к
Copy(Array, Array, Int64)
- Исходный код:
- Array.cs
- Исходный код:
- Array.cs
- Исходный код:
- Array.cs
- Исходный код:
- Array.cs
- Исходный код:
- 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)
Параметры
- length
- Int64
64-разрядное целое число, представляющее количество элементов для копирования. Целое число должно быть от нуля до Int32.MaxValue включительно.
Исключения
sourceArray и destinationArray имеют разные ряды.
sourceArray и destinationArray являются несовместимыми типами.
По крайней мере один элемент в sourceArray не может быть приведение к типу destinationArray.
length значение меньше 0 или больше , чем Int32.MaxValue.
length больше числа элементов в sourceArray.
–или–
length больше числа элементов в destinationArray.
Комментарии
sourceArray Параметры destinationArray должны иметь одинаковое количество измерений. Кроме того, destinationArray должно быть уже измерено и должно быть достаточно элементов для размещения скопированных данных.
При копировании между многомерными массивами массив ведет себя как длинный одномерный массив, где строки (или столбцы) концептуально размещаются в конце. Например, если массив содержит три строки (или столбцы) с четырьмя элементами, копирование шести элементов из начала массива будет копировать все четыре элемента первой строки (или столбец) и первые два элемента второй строки (или столбец).
Если sourceArray и destinationArray перекрываются, этот метод ведет себя так, как если бы исходные значения sourceArray сохранялись во временном расположении перед destinationArray перезаписи.
[C++]
Этот метод эквивалентен стандартной функции memmoveC/C++, а не memcpy.
Массивы могут быть массивами ссылочных типов или массивами типов значений. При необходимости выполняется переадресивание типов.
При копировании из массива ссылочного типа в массив типа значений каждый элемент распаковается, а затем копируется. При копировании из массива типа значений в массив ссылочного типа каждый элемент упаковается, а затем копируется.
При копировании из массива ссылочного или типа значений в массив ObjectObject создается для хранения каждого значения или ссылки, а затем копируется. При копировании из массива в Object массив ссылочного типа или массив типа значений и назначение невозможно, InvalidCastException создается исключение.
Если
sourceArrayиdestinationArrayоба массива ссылочного типа или оба массива типа Object, выполняется неглубокая копия. Неглубокая копия Array является новой Array , содержащей ссылки на те же элементы, что и исходный Array. Сами элементы или все, на которые ссылаются элементы, не копируются. В отличие от этого, глубокая копия Array элементов копирует элементы и все, прямо или косвенно на которые ссылаются элементы.
Вызывается ArrayTypeMismatchException , если массивы имеют несовместимые типы. Совместимость типов определяется следующим образом:
Тип совместим с собой.
Тип значения совместим с Object типом интерфейса, реализованным этим типом значения. Тип значения считается подключенным к интерфейсу только в том случае, если он реализует этот интерфейс напрямую. Отключенные типы несовместимы.
Два встроенных (предопределенных) типа значений совместимы, если копирование из исходного типа в целевой тип является расширением преобразования. Расширение преобразования никогда не теряет информацию, в то время как сужающее преобразование может потерять информацию. Например, преобразование 32-разрядного целого числа со знаком в 64-разрядное целое число со знаком является расширением преобразования и преобразованием 64-разрядного целого числа со знаком в 32-разрядное целое число со знаком является сужающим преобразованием. Дополнительные сведения о преобразованиях см. в разделе Convert.
Тип неинтринсического (определяемого пользователем) значения совместим только с самим собой.
Перечисления имеют неявное преобразование в Enum их базовый тип и в него.
Если каждому элементу требуется sourceArray даункаст (например, из базового класса в производный класс или из интерфейса к объекту) и один или несколько элементов не могут быть приведение к соответствующему типу в destinationArray, InvalidCastException создается исключение.
Если этот метод создает исключение при копировании, состояние destinationArray не определено.
Этот метод представляет собой операцию O(n), где n находится length.