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-битовое целое число. |
Примеры
В следующем примере кода показано, как копировать данные из типа ArrayObject integer в другой Array .
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)
- Исходный код:
- 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++]
Этот метод эквивалентен стандартной функции memmove
C/C++, а не memcpy
.
Массивы могут быть массивами ссылочного типа или массивами значений. При необходимости выполняется понижение типа.
При копировании из массива ссылочного типа в массив типа значения каждый элемент распаковки и затем копируется. При копировании из массива типа значения в массив ссылочного типа каждый элемент упаковается, а затем копируется.
При копировании из массива Object ссылочного типа или типа значения в массив создается для хранения каждого значения или ссылки, Object а затем копируется. При копировании из массива 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.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++]
Этот метод эквивалентен стандартной функции memmove
C/C++, а не memcpy
.
Массивы могут быть массивами ссылочного типа или массивами значений. При необходимости выполняется понижение типа.
При копировании из массива ссылочного типа в массив типа значения каждый элемент распаковки и затем копируется. При копировании из массива типа значения в массив ссылочного типа каждый элемент упаковается, а затем копируется.
При копировании из массива Object ссылочного типа или типа значения в массив создается для хранения каждого значения или ссылки, Object а затем копируется. При копировании из массива 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.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++]
Этот метод эквивалентен стандартной функции memmove
C/C++, а не memcpy
.
Массивы могут быть массивами ссылочного типа или массивами значений. При необходимости выполняется понижение типа.
При копировании из массива ссылочного типа в массив типа значения каждый элемент распаковки и затем копируется. При копировании из массива типа значения в массив ссылочного типа каждый элемент упаковается, а затем копируется.
При копировании из массива Object ссылочного типа или типа значения в массив создается для хранения каждого значения или ссылки, Object а затем копируется. При копировании из массива 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
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++]
Этот метод эквивалентен стандартной функции memmove
C/C++, а не memcpy
.
Массивы могут быть массивами ссылочного типа или массивами значений. При необходимости выполняется понижение типа.
При копировании из массива ссылочного типа в массив типа значения каждый элемент распаковки и затем копируется. При копировании из массива типа значения в массив ссылочного типа каждый элемент упаковается, а затем копируется.
При копировании из массива Object ссылочного типа или типа значения в массив создается для хранения каждого значения или ссылки, Object а затем копируется. При копировании из массива 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