Array.Copy 메서드

정의

Array의 요소 범위를 다른 Array에 복사하고 필요에 따라 형식 캐스팅 및 boxing을 수행합니다.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

복사가 시작되는 sourceArray의 인덱스를 나타내는 64비트 정수입니다.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

저장이 시작되는 destinationArray의 인덱스를 나타내는 64비트 정수입니다.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.

예외

sourceArraynull인 경우sourceArray is null.

-또는--or- destinationArraynull인 경우destinationArray is null.

sourceArraydestinationArray의 차수가 다른 경우sourceArray and destinationArray have different ranks.

sourceArraydestinationArray의 형식이 서로 호환되지 않는 경우sourceArray and destinationArray are of incompatible types.

sourceArray의 하나 이상의 요소를 destinationArray의 형식으로 캐스팅할 수 없습니다.At least one element in sourceArray cannot be cast to the type of destinationArray.

sourceIndexsourceArray의 유효한 인덱스 범위를 벗어납니다.sourceIndex is outside the range of valid indexes for the sourceArray.

-또는--or- destinationIndexdestinationArray의 유효한 인덱스 범위를 벗어납니다.destinationIndex is outside the range of valid indexes for the destinationArray.

-또는--or- length가 0보다 작거나 MaxValue보다 큽니다.length is less than 0 or greater than MaxValue.

lengthsourceIndex에서 sourceArray 끝 사이의 요소 수보다 큰 경우length is greater than the number of elements from sourceIndex to the end of sourceArray.

-또는--or- lengthdestinationIndex에서 destinationArray 끝 사이의 요소 수보다 큰 경우length is greater than the number of elements from destinationIndex to the end of destinationArray.

예제

다음 코드 예제에서는 Object 형식의 한 Array에서 정수 형식의 다른 Array로 복사 하는 방법을 보여 줍니다.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

설명

sourceArraydestinationArray 매개 변수의 차수가 동일 해야 합니다.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.

다차원 배열 간에 복사 하는 경우 배열 처럼 동작 하며 긴 1 차원 배열에 행 (또는 열)은 개념적으로 놓여집니다 엔드-투-엔드.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. 예를 들어, 배열에 세 개의 행 (또는 열) 4 개 요소를 사용 하 여 각각 복사 6 개의 요소가 있으면 배열의 시작 부분에서 첫 번째 행 (또는 열)의 모든 4 개의 요소가 및 두 번째 행 (또는 열)의 처음 두 요소 복사 됩니다.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 첫 번째 행의 상한 (또는 열)에 두 번째 행 (또는 열)의 길이와 2를 더한 값을 더한 값 이어야 합니다.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.

sourceArraydestinationArray 겹치는 경우이 메서드는 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++]

이 메서드는 memcpy가 아닌 표준 C/C++ 함수 memmove와 동일 합니다.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.

  • 참조 형식 배열에서 값 형식 배열에 복사할 때 각 요소는 unboxed 하 고 복사 됩니다.When copying from a reference-type array to a value-type array, each element is unboxed and then copied. 값 형식 배열에서 참조 형식 배열에 복사할 때 각 요소 boxed 이며 그런 다음 복사 됩니다.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 throw 됩니다.When copying from an Object array to a reference-type or value-type array and the assignment is not possible, an InvalidCastException is thrown.

  • sourceArraydestinationArray 모두 참조 형식 배열 이거나 둘 다 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이 throw 됩니다.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. 예를 들어, 64 비트 부호 있는 정수를 부호 있는 32 비트 정수를 변환할 확대 변환 이며 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이 throw 됩니다.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.

복사 하는 동안이 메서드가 예외를 throw 하는 경우 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

복사가 시작되는 sourceArray의 인덱스를 나타내는 32비트 정수입니다.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

저장이 시작되는 destinationArray의 인덱스를 나타내는 32비트 정수입니다.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.

예외

sourceArraynull인 경우sourceArray is null.

-또는--or- destinationArraynull인 경우destinationArray is null.

sourceArraydestinationArray의 차수가 다른 경우sourceArray and destinationArray have different ranks.

sourceArraydestinationArray의 형식이 서로 호환되지 않는 경우sourceArray and destinationArray are of incompatible types.

sourceArray의 하나 이상의 요소를 destinationArray의 형식으로 캐스팅할 수 없습니다.At least one element in sourceArray cannot be cast to the type of destinationArray.

sourceIndexsourceArray의 첫 번째 차원 하한보다 작은 경우sourceIndex is less than the lower bound of the first dimension of sourceArray.

-또는--or- destinationIndexdestinationArray의 첫 번째 차원 하한보다 작은 경우destinationIndex is less than the lower bound of the first dimension of destinationArray.

-또는--or- length가 0보다 작은 경우length is less than zero.

lengthsourceIndex에서 sourceArray 끝 사이의 요소 수보다 큰 경우length is greater than the number of elements from sourceIndex to the end of sourceArray.

-또는--or- lengthdestinationIndex에서 destinationArray 끝 사이의 요소 수보다 큰 경우length is greater than the number of elements from destinationIndex to the end of destinationArray.

예제

다음 코드 예제에서는 Object 형식의 한 Array에서 정수 형식의 다른 Array로 복사 하는 방법을 보여 줍니다.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

설명

sourceArraydestinationArray 매개 변수의 차수가 동일 해야 합니다.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.

다차원 배열 간에 복사 하는 경우 배열 처럼 동작 하며 긴 1 차원 배열에 행 (또는 열)은 개념적으로 놓여집니다 엔드-투-엔드.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. 예를 들어, 배열에 세 개의 행 (또는 열) 4 개 요소를 사용 하 여 각각 복사 6 개의 요소가 있으면 배열의 시작 부분에서 첫 번째 행 (또는 열)의 모든 4 개의 요소가 및 두 번째 행 (또는 열)의 처음 두 요소 복사 됩니다.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 첫 번째 행의 상한 (또는 열)에 두 번째 행 (또는 열)의 길이와 2를 더한 값을 더한 값 이어야 합니다.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.

sourceArraydestinationArray 겹치는 경우이 메서드는 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++]

이 메서드는 memcpy가 아닌 표준 C/C++ 함수 memmove와 동일 합니다.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.

  • 참조 형식 배열에서 값 형식 배열에 복사할 때 각 요소는 unboxed 하 고 복사 됩니다.When copying from a reference-type array to a value-type array, each element is unboxed and then copied. 값 형식 배열에서 참조 형식 배열에 복사할 때 각 요소 boxed 이며 그런 다음 복사 됩니다.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 throw 됩니다.When copying from an Object array to a reference-type or value-type array and the assignment is not possible, an InvalidCastException is thrown.

  • sourceArraydestinationArray 모두 참조 형식 배열 이거나 둘 다 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이 throw 됩니다.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. 예를 들어, 64 비트 부호 있는 정수를 부호 있는 32 비트 정수를 변환할 확대 변환 이며 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이 throw 됩니다.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.

복사 하는 동안이 메서드가 예외를 throw 하는 경우 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.

예외

sourceArraynull인 경우sourceArray is null.

-또는--or- destinationArraynull인 경우destinationArray is null.

sourceArraydestinationArray의 차수가 다른 경우sourceArray and destinationArray have different ranks.

sourceArraydestinationArray의 형식이 서로 호환되지 않는 경우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.

lengthsourceArray에 있는 요소의 수보다 큰 경우length is greater than the number of elements in sourceArray.

-또는--or- lengthdestinationArray에 있는 요소의 수보다 큰 경우length is greater than the number of elements in destinationArray.

설명

sourceArraydestinationArray 매개 변수의 차수가 동일 해야 합니다.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.

다차원 배열 간에 복사 하는 경우 배열 처럼 긴 1 차원 배열에 행 (또는 열)은 개념적으로 종단 간 배치 위치 합니다.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. 예를 들어, 배열에 세 개의 행 (또는 열) 4 개 요소를 사용 하 여 각각 복사 6 개의 요소가 있으면 배열의 시작 부분에서 첫 번째 행 (또는 열)의 모든 4 개의 요소가 및 두 번째 행 (또는 열)의 처음 두 요소 복사 됩니다.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).

sourceArraydestinationArray 겹치는 경우이 메서드는 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++]

이 메서드는 memcpy가 아닌 표준 C/C++ 함수 memmove와 동일 합니다.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.

  • 참조 형식 배열에서 값 형식 배열에 복사할 때 각 요소는 unboxed 하 고 복사 됩니다.When copying from a reference-type array to a value-type array, each element is unboxed and then copied. 값 형식 배열에서 참조 형식 배열에 복사할 때 각 요소 boxed 이며 그런 다음 복사 됩니다.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 throw 됩니다.When copying from an Object array to a reference-type or value-type array and the assignment is not possible, an InvalidCastException is thrown.

  • sourceArraydestinationArray 모두 참조 형식 배열 이거나 둘 다 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이 throw 됩니다.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. 예를 들어, 64 비트 부호 있는 정수를 부호 있는 32 비트 정수를 변환할 확대 변환 이며 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이 throw 됩니다.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.

복사 하는 동안이 메서드가 예외를 throw 하는 경우 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.

sourceArraydestinationArray의 차수가 다른 경우sourceArray and destinationArray have different ranks.

sourceArraydestinationArray의 형식이 서로 호환되지 않는 경우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보다 작은 경우length is less than zero.

lengthsourceArray에 있는 요소의 수보다 큰 경우length is greater than the number of elements in sourceArray.

-또는--or- lengthdestinationArray에 있는 요소의 수보다 큰 경우length is greater than the number of elements in destinationArray.

설명

sourceArraydestinationArray 매개 변수의 차수가 동일 해야 합니다.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.

다차원 배열 간에 복사 하는 경우 배열 처럼 긴 1 차원 배열에 행 (또는 열)은 개념적으로 종단 간 배치 위치 합니다.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. 예를 들어, 배열에 세 개의 행 (또는 열) 4 개 요소를 사용 하 여 각각 복사 6 개의 요소가 있으면 배열의 시작 부분에서 첫 번째 행 (또는 열)의 모든 4 개의 요소가 및 두 번째 행 (또는 열)의 처음 두 요소 복사 됩니다.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).

sourceArraydestinationArray 겹치는 경우이 메서드는 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++]

이 메서드는 memcpy가 아닌 표준 C/C++ 함수 memmove와 동일 합니다.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.

  • 참조 형식 배열에서 값 형식 배열에 복사할 때 각 요소는 unboxed 하 고 복사 됩니다.When copying from a reference-type array to a value-type array, each element is unboxed and then copied. 값 형식 배열에서 참조 형식 배열에 복사할 때 각 요소 boxed 이며 그런 다음 복사 됩니다.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 throw 됩니다.When copying from an Object array to a reference-type or value-type array and the assignment is not possible, an InvalidCastException is thrown.

  • sourceArraydestinationArray 모두 참조 형식 배열 이거나 둘 다 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이 throw 됩니다.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. 예를 들어, 64 비트 부호 있는 정수를 부호 있는 32 비트 정수를 변환할 확대 변환 이며 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이 throw 됩니다.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.

복사 하는 동안이 메서드가 예외를 throw 하는 경우 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.

추가 정보

적용 대상