Array.Copy Метод

Определение

Копирует диапазон элементов из одного массива Array в другой массив Array и при необходимости выполняет приведение типов и упаковку-преобразование.Copies a range of elements in one Array to another Array and performs type casting and boxing as required.

Перегрузки

Copy(Array, Int64, Array, Int64, Int64)

Копирует диапазон элементов из массива Array, начиная с заданного индекса источника, и вставляет его в другой массив Array, начиная с заданного индекса назначения.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. Длина и индексы задаются как 64-разрядные целые числа.The length and the indexes are specified as 64-bit integers.

Copy(Array, Int32, Array, Int32, Int32)

Копирует диапазон элементов из массива Array, начиная с заданного индекса источника, и вставляет его в другой массив Array, начиная с заданного индекса назначения.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. Длина и индексы задаются как 32-битовые целые числа.The length and the indexes are specified as 32-bit integers.

Copy(Array, Array, Int64)

Копирует диапазон элементов из массива Array, начиная с первого элемента, и вставляет его в другой массив Array, также начиная с первого элемента.Copies a range of elements from an Array starting at the first element and pastes them into another Array starting at the first element. Длина задается как 64-битовое целое число.The length is specified as a 64-bit integer.

Copy(Array, Array, Int32)

Копирует диапазон элементов из массива Array, начиная с первого элемента, и вставляет его в другой массив Array, также начиная с первого элемента.Copies a range of elements from an Array starting at the first element and pastes them into another Array starting at the first element. Длина задается как 32-битовое целое число.The length is specified as a 32-bit integer.

Copy(Array, Int64, Array, Int64, Int64)

Копирует диапазон элементов из массива Array, начиная с заданного индекса источника, и вставляет его в другой массив Array, начиная с заданного индекса назначения.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. Длина и индексы задаются как 64-разрядные целые числа.The length and the indexes are specified as 64-bit integers.

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)

Параметры

sourceArray
Array

Массив Array, содержащий данные, которые требуется скопировать.The Array that contains the data to copy.

sourceIndex
Int64

64-разрядное целое число, представляющее индекс в массиве sourceArray, с которого начинается копирование.A 64-bit integer that represents the index in the sourceArray at which copying begins.

destinationArray
Array

Массив Array, принимающий данные.The Array that receives the data.

destinationIndex
Int64

64-разрядное целое число, представляющее индекс в массиве destinationArray, с которого начинается сохранение.A 64-bit integer that represents the index in the destinationArray at which storing begins.

length
Int64

64-битовое целое число, представляющее число копируемых элементов.A 64-bit integer that represents the number of elements to copy. Целое число должно лежать в диапазоне от 0 до MaxValue включительно.The integer must be between zero and MaxValue, inclusive.

Исключения

Свойство sourceArray имеет значение null.sourceArray is null.

- или --or- Свойство destinationArray имеет значение null.destinationArray is null.

sourceArray и destinationArray имеют различные ранги.sourceArray and destinationArray have different ranks.

sourceArray и destinationArray имеют несовместимые типы.sourceArray and destinationArray are of incompatible types.

По меньшей мере один элемент в sourceArray не может быть приведен к типу destinationArray.At least one element in sourceArray cannot be cast to the type of destinationArray.

sourceIndex находится вне диапазона допустимых индексов для sourceArray.sourceIndex is outside the range of valid indexes for the sourceArray.

- или --or- destinationIndex находится вне диапазона допустимых индексов для destinationArray.destinationIndex is outside the range of valid indexes for the destinationArray.

- или --or- Параметрlength имеет значение меньше 0 или больше MaxValue.length is less than 0 or greater than MaxValue.

length больше, чем число элементов с sourceIndex до конца sourceArray.length is greater than the number of elements from sourceIndex to the end of sourceArray.

- или --or- length больше числа элементов с destinationIndex до конца destinationArray.length is greater than the number of elements from destinationIndex to the end of destinationArray.

Примеры

В следующем примере кода показано, как скопировать из одного Array типа Object в другой Array типа Integer.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
 */
using System;
public class SamplesArray  {

   public static void Main()  {

      // Creates and initializes a new Array of type Int32.
      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( "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 );
   }


   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.

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
*/
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

Комментарии

Параметры sourceArray и destinationArray должны иметь одинаковое число измерений.The sourceArray and destinationArray parameters must have the same number of dimensions. Кроме того, destinationArray должен уже быть измеренным и должно иметь достаточное количество элементов, начиная с destinationIndex, чтобы разместить скопированные данные.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). Чтобы начать копирование со второго элемента третьей строки (или столбца), sourceIndex должно быть верхней границей первой строки (или столбца) плюс длина второй строки (или столбца) плюс два.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.

Если sourceArray и destinationArray перекрываются, этот метод ведет себя так, как если бы исходные значения sourceArray сохранялись во временном расположении, прежде чем destinationArray перезапишется.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++][C++]

Этот метод эквивалентен стандарту C/C++ Function memmove, а не memcpy.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.

  • При копировании из массива ссылочного типа или типа значений в массив Object создается Object для хранения каждого значения или ссылки, а затем копируется.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. При копировании из массива Object в массив ссылочного типа или типа значений, и присваивание невозможно, создается InvalidCastException.When copying from an Object array to a reference-type or value-type array and the assignment is not possible, an InvalidCastException is thrown.

  • Если sourceArray и destinationArray являются массивами ссылочного типа или массивами типа Object, выполняется неполная копия.If sourceArray and destinationArray are both reference-type arrays or are both arrays of type Object, a shallow copy is performed. Неполная копия Array — это новая Array, содержащая ссылки на те же элементы, что и исходный Array.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. В отличие от этого, глубокая копия Array копирует элементы и все, на которые прямо или косвенно ссылаются элементы.In contrast, a deep copy of an Array copies the elements and everything directly or indirectly referenced by the elements.

Если массивы имеют несовместимые типы, возникает исключение ArrayTypeMismatchException.An ArrayTypeMismatchException is thrown if the arrays are of incompatible types. Совместимость типов определяется следующим образом:Type compatibility is defined as follows:

  • Тип является совместимым с самим собой.A type is compatible with itself.

  • Тип значения совместим с Object и с типом интерфейса, реализованным этим типом значения.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. Например, преобразование 32-разрядного целого числа со знаком в 64-разрядное целое число со знаком является расширяющим преобразованием, а преобразование 64-разрядного целого числа со знаком в 32-разрядное целое число — это понижающие преобразования.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. Дополнительные сведения о преобразованиях см. в разделе Convert.For more information about conversions, see Convert.

  • Невстроенный тип значения (определяемый пользователем) совместим только с самим собой.A nonintrinsic (user-defined) value type is compatible only with itself.

  • Перечисления имеют неявное преобразование в Enum и на их базовый тип.Enumerations have an implicit conversion to Enum and to their underlying type.

Если каждому элементу в sourceArray требуется наследование (например, от базового класса до производного класса или от интерфейса к объекту), а один или несколько элементов нельзя привести к соответствующему типу в destinationArray, создается исключение InvalidCastException.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.

Если этот метод вызывает исключение при копировании, состояние destinationArray не определено.If this method throws an exception while copying, the state of destinationArray is undefined.

Этот метод является операцией O (n), где nlength.This method is an O(n) operation, where n is length.

Дополнительно

Copy(Array, Int32, Array, Int32, Int32)

Копирует диапазон элементов из массива Array, начиная с заданного индекса источника, и вставляет его в другой массив Array, начиная с заданного индекса назначения.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. Длина и индексы задаются как 32-битовые целые числа.The length and the indexes are specified as 32-bit integers.

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)

Параметры

sourceArray
Array

Массив Array, содержащий данные, которые требуется скопировать.The Array that contains the data to copy.

sourceIndex
Int32

32-разрядное целое число, представляющее индекс в массиве sourceArray, с которого начинается копирование.A 32-bit integer that represents the index in the sourceArray at which copying begins.

destinationArray
Array

Массив Array, принимающий данные.The Array that receives the data.

destinationIndex
Int32

32-разрядное целое число, представляющее индекс в массиве destinationArray, с которого начинается сохранение.A 32-bit integer that represents the index in the destinationArray at which storing begins.

length
Int32

32-битовое целое число, представляющее число копируемых элементов.A 32-bit integer that represents the number of elements to copy.

Исключения

Свойство sourceArray имеет значение null.sourceArray is null.

- или --or- Свойство destinationArray имеет значение null.destinationArray is null.

sourceArray и destinationArray имеют различные ранги.sourceArray and destinationArray have different ranks.

sourceArray и destinationArray имеют несовместимые типы.sourceArray and destinationArray are of incompatible types.

По меньшей мере один элемент в sourceArray не может быть приведен к типу destinationArray.At least one element in sourceArray cannot be cast to the type of destinationArray.

sourceIndex меньше, чем нижняя граница первого измерения массива sourceArray.sourceIndex is less than the lower bound of the first dimension of sourceArray.

- или --or- destinationIndex меньше, чем нижняя граница первого измерения массива destinationArray.destinationIndex is less than the lower bound of the first dimension of destinationArray.

- или --or- Значение параметра length меньше нуля.length is less than zero.

length больше числа элементов с sourceIndex до конца sourceArray.length is greater than the number of elements from sourceIndex to the end of sourceArray.

- или --or- length больше числа элементов с destinationIndex до конца destinationArray.length is greater than the number of elements from destinationIndex to the end of destinationArray.

Примеры

В следующем примере кода показано, как скопировать из одного Array типа Object в другой Array типа Integer.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
 */
using System;
public class SamplesArray  {

   public static void Main()  {

      // Creates and initializes a new Array of type Int32.
      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( "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 );
   }


   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.

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
*/
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

Комментарии

Параметры sourceArray и destinationArray должны иметь одинаковое число измерений.The sourceArray and destinationArray parameters must have the same number of dimensions. Кроме того, destinationArray должен уже быть измеренным и должно иметь достаточное количество элементов, начиная с destinationIndex, чтобы разместить скопированные данные.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). Чтобы начать копирование со второго элемента третьей строки (или столбца), sourceIndex должно быть верхней границей первой строки (или столбца) плюс длина второй строки (или столбца) плюс два.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.

Если sourceArray и destinationArray перекрываются, этот метод ведет себя так, как если бы исходные значения sourceArray сохранялись во временном расположении, прежде чем destinationArray перезапишется.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++][C++]

Этот метод эквивалентен стандарту C/C++ Function memmove, а не memcpy.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.

  • При копировании из массива ссылочного типа или типа значений в массив Object создается Object для хранения каждого значения или ссылки, а затем копируется.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. При копировании из массива Object в массив ссылочного типа или типа значений, и присваивание невозможно, создается InvalidCastException.When copying from an Object array to a reference-type or value-type array and the assignment is not possible, an InvalidCastException is thrown.

  • Если sourceArray и destinationArray являются массивами ссылочного типа или массивами типа Object, выполняется неполная копия.If sourceArray and destinationArray are both reference-type arrays or are both arrays of type Object, a shallow copy is performed. Неполная копия Array — это новая Array, содержащая ссылки на те же элементы, что и исходный Array.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. В отличие от этого, глубокая копия Array копирует элементы и все, на которые прямо или косвенно ссылаются элементы.In contrast, a deep copy of an Array copies the elements and everything directly or indirectly referenced by the elements.

Если массивы имеют несовместимые типы, возникает исключение ArrayTypeMismatchException.An ArrayTypeMismatchException is thrown if the arrays are of incompatible types. Совместимость типов определяется следующим образом:Type compatibility is defined as follows:

  • Тип является совместимым с самим собой.A type is compatible with itself.

  • Тип значения совместим с Object и с типом интерфейса, реализованным этим типом значения.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. Например, преобразование 32-разрядного целого числа со знаком в 64-разрядное целое число со знаком является расширяющим преобразованием, а преобразование 64-разрядного целого числа со знаком в 32-разрядное целое число — это понижающие преобразования.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. Дополнительные сведения о преобразованиях см. в разделе Convert.For more information about conversions, see Convert.

  • Невстроенный тип значения (определяемый пользователем) совместим только с самим собой.A nonintrinsic (user-defined) value type is compatible only with itself.

  • Перечисления имеют неявное преобразование в Enum и на их базовый тип.Enumerations have an implicit conversion to Enum and to their underlying type.

Если каждому элементу в sourceArray требуется наследование (например, от базового класса до производного класса или от интерфейса к объекту), а один или несколько элементов нельзя привести к соответствующему типу в destinationArray, создается исключение InvalidCastException.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.

Если этот метод вызывает исключение при копировании, состояние destinationArray не определено.If this method throws an exception while copying, the state of destinationArray is undefined.

Этот метод является операцией O (n), где nlength.This method is an O(n) operation, where n is length.

Дополнительно

Copy(Array, Array, Int64)

Копирует диапазон элементов из массива Array, начиная с первого элемента, и вставляет его в другой массив Array, также начиная с первого элемента.Copies a range of elements from an Array starting at the first element and pastes them into another Array starting at the first element. Длина задается как 64-битовое целое число.The length is specified as a 64-bit integer.

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)

Параметры

sourceArray
Array

Массив Array, содержащий данные, которые требуется скопировать.The Array that contains the data to copy.

destinationArray
Array

Массив Array, принимающий данные.The Array that receives the data.

length
Int64

64-битовое целое число, представляющее число копируемых элементов.A 64-bit integer that represents the number of elements to copy. Целое число должно лежать в диапазоне от 0 до MaxValue включительно.The integer must be between zero and MaxValue, inclusive.

Исключения

Свойство sourceArray имеет значение null.sourceArray is null.

- или --or- destinationArraynull.destinationArray is null.

sourceArray и destinationArray имеют различные ранги.sourceArray and destinationArray have different ranks.

sourceArray и destinationArray имеют несовместимые типы.sourceArray and destinationArray are of incompatible types.

По меньшей мере один элемент в sourceArray не может быть приведен к типу destinationArray.At least one element in sourceArray cannot be cast to the type of destinationArray.

Параметр length имеет значение меньше 0 или больше MaxValue.length is less than 0 or greater than MaxValue.

length больше числа элементов в sourceArray.length is greater than the number of elements in sourceArray.

- или --or- length больше числа элементов в destinationArray.length is greater than the number of elements in destinationArray.

Комментарии

Параметры sourceArray и destinationArray должны иметь одинаковое число измерений.The sourceArray and destinationArray parameters must have the same number of dimensions. Кроме того, destinationArray должен уже быть измеренным и должно иметь достаточное количество элементов для размещения скопированных данных.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).

Если sourceArray и destinationArray перекрываются, этот метод ведет себя так, как если бы исходные значения sourceArray сохранялись во временном расположении, прежде чем destinationArray перезапишется.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++][C++]

Этот метод эквивалентен стандарту C/C++ Function memmove, а не memcpy.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.

  • При копировании из массива ссылочного типа или типа значений в массив Object создается Object для хранения каждого значения или ссылки, а затем копируется.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. При копировании из массива Object в массив ссылочного типа или типа значений, и присваивание невозможно, создается InvalidCastException.When copying from an Object array to a reference-type or value-type array and the assignment is not possible, an InvalidCastException is thrown.

  • Если sourceArray и destinationArray являются массивами ссылочного типа или массивами типа Object, выполняется неполная копия.If sourceArray and destinationArray are both reference-type arrays or are both arrays of type Object, a shallow copy is performed. Неполная копия Array — это новая Array, содержащая ссылки на те же элементы, что и исходный Array.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. В отличие от этого, глубокая копия Array копирует элементы и все, на которые прямо или косвенно ссылаются элементы.In contrast, a deep copy of an Array copies the elements and everything directly or indirectly referenced by the elements.

Если массивы имеют несовместимые типы, возникает исключение ArrayTypeMismatchException.An ArrayTypeMismatchException is thrown if the arrays are of incompatible types. Совместимость типов определяется следующим образом:Type compatibility is defined as follows:

  • Тип является совместимым с самим собой.A type is compatible with itself.

  • Тип значения совместим с Object и с типом интерфейса, реализованным этим типом значения.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. Например, преобразование 32-разрядного целого числа со знаком в 64-разрядное целое число со знаком является расширяющим преобразованием, а преобразование 64-разрядного целого числа со знаком в 32-разрядное целое число — это понижающие преобразования.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. Дополнительные сведения о преобразованиях см. в разделе Convert.For more information about conversions, see Convert.

  • Невстроенный тип значения (определяемый пользователем) совместим только с самим собой.A nonintrinsic (user-defined) value type is compatible only with itself.

  • Перечисления имеют неявное преобразование в Enum и на их базовый тип.Enumerations have an implicit conversion to Enum and to their underlying type.

Если каждому элементу в sourceArray требуется наследование (например, от базового класса до производного класса или от интерфейса к объекту), а один или несколько элементов нельзя привести к соответствующему типу в destinationArray, создается исключение InvalidCastException.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.

Если этот метод вызывает исключение при копировании, состояние destinationArray не определено.If this method throws an exception while copying, the state of destinationArray is undefined.

Этот метод является операцией O (n), где nlength.This method is an O(n) operation, where n is length.

Дополнительно

Copy(Array, Array, Int32)

Копирует диапазон элементов из массива Array, начиная с первого элемента, и вставляет его в другой массив Array, также начиная с первого элемента.Copies a range of elements from an Array starting at the first element and pastes them into another Array starting at the first element. Длина задается как 32-битовое целое число.The length is specified as a 32-bit integer.

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)

Параметры

sourceArray
Array

Массив Array, содержащий данные, которые требуется скопировать.The Array that contains the data to copy.

destinationArray
Array

Массив Array, принимающий данные.The Array that receives the data.

length
Int32

32-битовое целое число, представляющее число копируемых элементов.A 32-bit integer that represents the number of elements to copy.

Исключения

sourceArraynull.sourceArray is null.

- или --or- destinationArraynull.destinationArray is null.

sourceArray и destinationArray имеют различные ранги.sourceArray and destinationArray have different ranks.

sourceArray и destinationArray имеют несовместимые типы.sourceArray and destinationArray are of incompatible types.

По меньшей мере один элемент в sourceArray не может быть приведен к типу destinationArray.At least one element in sourceArray cannot be cast to the type of destinationArray.

Значение параметра length меньше нуля.length is less than zero.

length больше числа элементов в sourceArray.length is greater than the number of elements in sourceArray.

- или --or- length больше числа элементов в destinationArray.length is greater than the number of elements in destinationArray.

Комментарии

Параметры sourceArray и destinationArray должны иметь одинаковое число измерений.The sourceArray and destinationArray parameters must have the same number of dimensions. Кроме того, destinationArray должен уже быть измеренным и должно иметь достаточное количество элементов для размещения скопированных данных.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).

Если sourceArray и destinationArray перекрываются, этот метод ведет себя так, как если бы исходные значения sourceArray сохранялись во временном расположении, прежде чем destinationArray перезапишется.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++][C++]

Этот метод эквивалентен стандарту C/C++ Function memmove, а не memcpy.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.

  • При копировании из массива ссылочного типа или типа значений в массив Object создается Object для хранения каждого значения или ссылки, а затем копируется.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. При копировании из массива Object в массив ссылочного типа или типа значений, и присваивание невозможно, создается InvalidCastException.When copying from an Object array to a reference-type or value-type array and the assignment is not possible, an InvalidCastException is thrown.

  • Если sourceArray и destinationArray являются массивами ссылочного типа или массивами типа Object, выполняется неполная копия.If sourceArray and destinationArray are both reference-type arrays or are both arrays of type Object, a shallow copy is performed. Неполная копия Array — это новая Array, содержащая ссылки на те же элементы, что и исходный Array.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. В отличие от этого, глубокая копия Array копирует элементы и все, на которые прямо или косвенно ссылаются элементы.In contrast, a deep copy of an Array copies the elements and everything directly or indirectly referenced by the elements.

Если массивы имеют несовместимые типы, возникает исключение ArrayTypeMismatchException.An ArrayTypeMismatchException is thrown if the arrays are of incompatible types. Совместимость типов определяется следующим образом:Type compatibility is defined as follows:

  • Тип является совместимым с самим собой.A type is compatible with itself.

  • Тип значения совместим с Object и с типом интерфейса, реализованным этим типом значения.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. Например, преобразование 32-разрядного целого числа со знаком в 64-разрядное целое число со знаком является расширяющим преобразованием, а преобразование 64-разрядного целого числа со знаком в 32-разрядное целое число — это понижающие преобразования.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. Дополнительные сведения о преобразованиях см. в разделе Convert.For more information about conversions, see Convert.

  • Невстроенный тип значения (определяемый пользователем) совместим только с самим собой.A nonintrinsic (user-defined) value type is compatible only with itself.

  • Перечисления имеют неявное преобразование в Enum и на их базовый тип.Enumerations have an implicit conversion to Enum and to their underlying type.

Если каждому элементу в sourceArray требуется наследование (например, от базового класса до производного класса или от интерфейса к объекту), а один или несколько элементов нельзя привести к соответствующему типу в destinationArray, создается исключение InvalidCastException.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.

Если этот метод вызывает исключение при копировании, состояние destinationArray не определено.If this method throws an exception while copying, the state of destinationArray is undefined.

Этот метод является операцией O (n), где nlength.This method is an O(n) operation, where n is length.

Дополнительно

Применяется к