Array.Copy 메서드

정의

Array의 요소 범위를 다른 Array에 복사하고 필요에 따라 형식 캐스팅 및 boxing을 수행합니다.

오버로드

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

Array의 요소 범위를 지정한 소스 인덱스부터 복사하여 지정된 대상 인덱스부터 시작하는 다른 Array에 붙여 넣습니다. 길이와 인덱스가 64비트 정수로 지정되어 있습니다.

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

Array의 요소 범위를 지정한 소스 인덱스부터 복사하여 지정된 대상 인덱스부터 시작하는 다른 Array에 붙여 넣습니다. 길이와 인덱스가 32비트 정수로 지정되어 있습니다.

Copy(Array, Array, Int32)

Array의 요소 범위를 첫 번째 요소부터 복사하여 다른 Array에 첫 번째 요소부터 붙여넣습니다. 길이가 32비트 정수로 지정되어 있습니다.

Copy(Array, Array, Int64)

Array의 요소 범위를 첫 번째 요소부터 복사하여 다른 Array에 첫 번째 요소부터 붙여넣습니다. 길이가 64비트 정수로 지정되어 있습니다.

예제

다음 코드 예제에서는 형식 중 하나에서 Array 다른 Array 형식 Object 정수로 복사하는 방법을 보여줍니다.

using namespace System;
void PrintValues( Array^ myArr );
void main()
{
   
   // Creates and initializes a new Array instance of type Int32.
   Array^ myIntArray = Array::CreateInstance( Type::GetType(  "System.Int32" ), 5 );
   for ( int i = myIntArray->GetLowerBound( 0 ); i <= myIntArray->GetUpperBound( 0 ); i++ )
      myIntArray->SetValue( i + 1, i );
   
   // Creates and initializes a new Array instance of type Object.
   Array^ myObjArray = Array::CreateInstance( Type::GetType(  "System.Object" ), 5 );
   for ( int i = myObjArray->GetLowerBound( 0 ); i <= myObjArray->GetUpperBound( 0 ); i++ )
      myObjArray->SetValue( i + 26, i );
   
   // Displays the initial values of both arrays.
   Console::WriteLine(  "Int32 array:" );
   PrintValues( myIntArray );
   Console::WriteLine(  "Object array:" );
   PrintValues( myObjArray );
   
   // Copies the first element from the Int32 array to the Object array.
   Array::Copy( myIntArray, myIntArray->GetLowerBound( 0 ), myObjArray, myObjArray->GetLowerBound( 0 ), 1 );
   
   // Copies the last two elements from the Object array to the Int32 array.
   Array::Copy( myObjArray, myObjArray->GetUpperBound( 0 ) - 1, myIntArray, myIntArray->GetUpperBound( 0 ) - 1, 2 );
   
   // Displays the values of the modified arrays.
   Console::WriteLine(  "Int32 array - Last two elements should now be the same as Object array:" );
   PrintValues( myIntArray );
   Console::WriteLine(  "Object array - First element should now be the same as Int32 array:" );
   PrintValues( myObjArray );
}

void PrintValues( Array^ myArr )
{
   System::Collections::IEnumerator^ myEnumerator = myArr->GetEnumerator();
   int i = 0;
   int cols = myArr->GetLength( myArr->Rank - 1 );
   while ( myEnumerator->MoveNext() )
   {
      if ( i < cols )
      {
         i++;
      }
      else
      {
         Console::WriteLine();
         i = 1;
      }

      Console::Write(  "\t{0}", myEnumerator->Current );
   }

   Console::WriteLine();
}

/*
 This code produces the following output.
 
 Int32 array:
     1    2    3    4    5
 Object array:
     26    27    28    29    30
 Int32 array - Last two elements should now be the same as Object array:
     1    2    3    29    30
 Object array - First element should now be the same as Int32 array:
     1    27    28    29    30
 */
open System

let printValues (myArr: 'a []) =
    let mutable i = 0;
    let cols = myArr.GetLength(myArr.Rank - 1)
    for item in myArr do
        if i < cols then
            i <- i + 1
        else
            printfn ""
            i <- 1
        printf $"\t{item}"
    printfn ""

 // Creates and initializes a new Array of type int.
let myIntArray = [| 1..5 |]

// Creates and initializes a new Array of type Object.
let myObjArray = Array.init 5 (fun i -> i + 26 :> obj)

// Displays the initial values of both arrays.
printfn "int array:"
printValues myIntArray 
printfn "Object array:"
printValues myObjArray

// Copies the first element from the int array to the Object array.
Array.Copy(myIntArray, myIntArray.GetLowerBound 0, myObjArray, myObjArray.GetLowerBound 0, 1)

// Copies the last two elements from the Object array to the int array.
Array.Copy(myObjArray, myObjArray.GetUpperBound 0 - 1, myIntArray, myIntArray.GetUpperBound 0 - 1, 2)

// Displays the values of the modified arrays.
printfn "int array - Last two elements should now be the same as Object array:"
printValues myIntArray 
printfn "Object array - First element should now be the same as int array:"
printValues myObjArray


// This code produces the following output.
//     int array:
//         1    2    3    4    5
//     Object array:
//         26    27    28    29    30
//     int array - Last two elements should now be the same as Object array:
//         1    2    3    29    30
//     Object array - First element should now be the same as int array:
//         1    27    28    29    30
using System;
public class SamplesArray  {

   public static void Main()  {

      // Creates and initializes a new Array of type int.
      Array myIntArray=Array.CreateInstance( typeof(System.Int32), 5 );
      for ( int i = myIntArray.GetLowerBound(0); i <= myIntArray.GetUpperBound(0); i++ )
         myIntArray.SetValue( i+1, i );

      // Creates and initializes a new Array of type Object.
      Array myObjArray = Array.CreateInstance( typeof(System.Object), 5 );
      for ( int i = myObjArray.GetLowerBound(0); i <= myObjArray.GetUpperBound(0); i++ )
         myObjArray.SetValue( i+26, i );

      // Displays the initial values of both arrays.
      Console.WriteLine( "int array:" );
      PrintValues( myIntArray );
      Console.WriteLine( "Object array:" );
      PrintValues( myObjArray );

      // Copies the first element from the int array to the Object array.
      Array.Copy( myIntArray, myIntArray.GetLowerBound(0), myObjArray, myObjArray.GetLowerBound(0), 1 );

      // Copies the last two elements from the Object array to the int array.
      Array.Copy( myObjArray, myObjArray.GetUpperBound(0) - 1, myIntArray, myIntArray.GetUpperBound(0) - 1, 2 );

      // Displays the values of the modified arrays.
      Console.WriteLine( "int array - Last two elements should now be the same as Object array:" );
      PrintValues( myIntArray );
      Console.WriteLine( "Object array - First element should now be the same as int array:" );
      PrintValues( myObjArray );
   }

   public static void PrintValues( Array myArr )  {
      System.Collections.IEnumerator myEnumerator = myArr.GetEnumerator();
      int i = 0;
      int cols = myArr.GetLength( myArr.Rank - 1 );
      while ( myEnumerator.MoveNext() )  {
         if ( i < cols )  {
            i++;
         } else  {
            Console.WriteLine();
            i = 1;
         }
         Console.Write( "\t{0}", myEnumerator.Current );
      }
      Console.WriteLine();
   }
}
/*
This code produces the following output.

int array:
    1    2    3    4    5
Object array:
    26    27    28    29    30
int array - Last two elements should now be the same as Object array:
    1    2    3    29    30
Object array - First element should now be the same as int array:
    1    27    28    29    30
*/
Public Class SamplesArray    
    
    Public Shared Sub Main()
        
        ' Creates and initializes a new Array of type Int32.
        Dim myIntArray As Array = _
           Array.CreateInstance(GetType(System.Int32), 5)
        Dim i As Integer
        For i = myIntArray.GetLowerBound(0) To myIntArray.GetUpperBound(0)
            myIntArray.SetValue(i + 1, i)
        Next i 
        ' Creates and initializes a new Array of type Object.
        Dim myObjArray As Array = _
           Array.CreateInstance(GetType(System.Object), 5)
        For i = myObjArray.GetLowerBound(0) To myObjArray.GetUpperBound(0)
            myObjArray.SetValue(i + 26, i)
        Next i 
        ' Displays the initial values of both arrays.
        Console.WriteLine("Int32 array:")
        PrintValues(myIntArray)
        Console.WriteLine("Object array:")
        PrintValues(myObjArray)
        
        ' Copies the first element from the Int32 array to the Object array.
        Array.Copy(myIntArray, myIntArray.GetLowerBound(0), myObjArray, _
           myObjArray.GetLowerBound(0), 1)
        
        ' Copies the last two elements from the Object array to the Int32 array.
        Array.Copy(myObjArray, myObjArray.GetUpperBound(0) - 1, myIntArray, _
           myIntArray.GetUpperBound(0) - 1, 2)
        
        ' Displays the values of the modified arrays.
        Console.WriteLine("Int32 array - Last two elements should now be " _
           + "the same as Object array:")
        PrintValues(myIntArray)
        Console.WriteLine("Object array - First element should now be the " _
           + "same as Int32 array:")
        PrintValues(myObjArray)
    End Sub
    
    Public Shared Sub PrintValues(myArr As Array)
        Dim myEnumerator As System.Collections.IEnumerator = _
           myArr.GetEnumerator()
        Dim i As Integer = 0
        Dim cols As Integer = myArr.GetLength((myArr.Rank - 1))
        While myEnumerator.MoveNext()
            If i < cols Then
                i += 1
            Else
                Console.WriteLine()
                i = 1
            End If
            Console.Write(ControlChars.Tab + "{0}", myEnumerator.Current)
        End While
        Console.WriteLine()
    End Sub
End Class

' This code produces the following output.
' 
' Int32 array:
'     1    2    3    4    5
' Object array:
'     26    27    28    29    30
' Int32 array - Last two elements should now be the same as Object array:
'     1    2    3    29    30
' Object array - First element should now be the same as Int32 array:
'     1    27    28    29    30

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

Source:
Array.cs
Source:
Array.cs
Source:
Array.cs

Array의 요소 범위를 지정한 소스 인덱스부터 복사하여 지정된 대상 인덱스부터 시작하는 다른 Array에 붙여 넣습니다. 길이와 인덱스가 64비트 정수로 지정되어 있습니다.

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입니다.

sourceIndex
Int64

복사가 시작되는 sourceArray의 인덱스를 나타내는 64비트 정수입니다.

destinationArray
Array

데이터를 받는 Array입니다.

destinationIndex
Int64

저장이 시작되는 destinationArray의 인덱스를 나타내는 64비트 정수입니다.

length
Int64

복사할 요소의 개수를 나타내는 64비트 정수입니다. 정수는 0과 Int32.MaxValue 사이여야 합니다( 포함).

예외

sourceArraynull입니다.

또는

destinationArray이(가) null인 경우

sourceArraydestinationArray의 차수가 다릅니다.

sourceArraydestinationArray는 호환되지 않는 형식입니다.

sourceArray의 하나 이상의 요소를 destinationArray의 형식으로 캐스팅할 수 없습니다.

sourceIndexsourceArray의 유효한 인덱스 범위를 벗어납니다.

또는

destinationIndexdestinationArray의 유효한 인덱스 범위를 벗어납니다.

또는

length 가 0보다 작거나 Int32.MaxValue보다 큽 수 있습니다.

lengthsourceIndex부터 sourceArray 끝까지의 요소 수보다 큽니다.

또는

lengthdestinationIndex부터 destinationArray 끝까지의 요소 수보다 큽니다.

설명

sourceArraydestinationArray 매개 변수의 차원 수는 같아야 합니다. 또한 는 destinationArray 이미 차원화되어 있어야 하며 복사된 데이터를 수용하기 위해 위치에서 시작하는 destinationIndex 충분한 수의 요소가 있어야 합니다.

다차원 배열 간에 복사할 때 배열은 긴 1차원 배열처럼 동작하며, 여기서 행(또는 열)은 개념적으로 종단 간 배치됩니다. 예를 들어 배열에 각각 4개의 요소가 있는 세 개의 행(또는 열)이 있는 경우 배열의 시작 부분에서 6개의 요소를 복사하면 첫 번째 행(또는 열)의 4개 요소와 두 번째 행(또는 열)의 처음 두 요소가 모두 복사됩니다. 세 번째 행(또는 열) sourceIndex 의 두 번째 요소에서 복사를 시작하려면 첫 번째 행(또는 열)의 상한과 두 번째 행(또는 열)의 길이와 2를 더한 값이어야 합니다.

destinationArray 가 겹치면 sourceArray 이 메서드는 가 덮어쓰기 전에 destinationArraysourceArray 원래 값이 임시 위치에 유지된 것처럼 동작합니다.

[C++]

이 메서드는 가 아닌 memcpy표준 C/C++ 함수memmove와 동일합니다.

배열은 참조 형식 배열 또는 값 형식 배열일 수 있습니다. 필요에 따라 형식 다운캐스팅이 수행됩니다.

  • 참조 형식 배열에서 값 형식 배열로 복사할 때 각 요소는 언박싱된 다음 복사됩니다. 값 형식 배열에서 참조 형식 배열로 복사할 때 각 요소가 boxed된 다음 복사됩니다.

  • 참조 형식 또는 값 형식 배열에서 배열 Object 로 복사할 Object 때 각 값 또는 참조를 저장하도록 가 만들어지고 복사됩니다. 배열에서 Object 참조 형식 또는 값 형식 배열로 복사할 때 할당이 불가능하면 이 InvalidCastException throw됩니다.

  • destinationArray 가 모두 참조 형식 배열이거나 형식의 Object배열인 경우 sourceArray 단순 복사가 수행됩니다. 의 Array 단순 복사본은 원래 Array와 동일한 요소에 대한 참조를 포함하는 새 Array 입니다. 요소 자체 또는 요소에서 참조하는 모든 항목은 복사되지 않습니다. 반면, 의 딥 복사본은 Array 요소와 요소에서 직접 또는 간접적으로 참조하는 모든 항목을 복사합니다.

ArrayTypeMismatchException 배열이 호환되지 않는 형식이면 이 throw됩니다. 형식 호환성은 다음과 같이 정의됩니다.

  • 형식은 자체와 호환됩니다.

  • 값 형식은 해당 값 형식에 Object 의해 구현된 인터페이스 형식과 및 와 호환됩니다. 값 형식은 해당 인터페이스를 직접 구현하는 경우에만 인터페이스에 연결된 것으로 간주됩니다. 연결이 끊긴 형식은 호환되지 않습니다.

  • 원본 형식에서 대상 형식으로 복사하는 것이 확대 변환인 경우 두 가지 내장(미리 정의된) 값 형식이 호환됩니다. 확대 변환은 정보를 잃지 않는 반면 축소 변환은 정보를 잃을 수 있습니다. 예를 들어 서명된 32비트 정수 를 64비트 부명 정수로 변환하는 것은 확대 변환이며 64비트 부의 정수는 32비트 부명 정수로 변환하는 것은 축소 변환입니다. 변환에 대한 자세한 내용은 를 참조하세요 Convert.

  • 기본이 아닌(사용자 정의) 값 형식은 자체와만 호환됩니다.

  • 열거형에는 내부 형식으로 Enum 및 로의 암시적 변환이 있습니다.

의 모든 요소에 sourceArray 다운캐스트가 필요한 경우(예: 기본 클래스에서 파생 클래스로 또는 인터페이스에서 개체로) 하나 이상의 요소를 의 해당 형식 destinationArray으로 캐스팅할 수 없는 경우 이 InvalidCastException throw됩니다.

복사하는 동안 이 메서드가 예외를 throw하면 의 destinationArray 상태가 정의되지 않습니다.

이 메서드는 O (n) 작업, 여기서 nlength합니다.

추가 정보

적용 대상

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

Source:
Array.CoreCLR.cs
Source:
Array.cs
Source:
Array.cs

Array의 요소 범위를 지정한 소스 인덱스부터 복사하여 지정된 대상 인덱스부터 시작하는 다른 Array에 붙여 넣습니다. 길이와 인덱스가 32비트 정수로 지정되어 있습니다.

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입니다.

sourceIndex
Int32

복사가 시작되는 sourceArray의 인덱스를 나타내는 32비트 정수입니다.

destinationArray
Array

데이터를 받는 Array입니다.

destinationIndex
Int32

저장이 시작되는 destinationArray의 인덱스를 나타내는 32비트 정수입니다.

length
Int32

복사할 요소의 개수를 나타내는 32비트 정수입니다.

예외

sourceArraynull입니다.

또는

destinationArray이(가) null인 경우

sourceArraydestinationArray의 차수가 다릅니다.

sourceArraydestinationArray는 호환되지 않는 형식입니다.

sourceArray의 하나 이상의 요소를 destinationArray의 형식으로 캐스팅할 수 없습니다.

sourceIndexsourceArray의 첫 번째 차원 하한값보다 작습니다.

또는

destinationIndexdestinationArray의 첫 번째 차원 하한값보다 작습니다.

또는

length가 0보다 작은 경우

lengthsourceIndex부터 sourceArray 끝까지의 요소 수보다 큽니다.

또는

lengthdestinationIndex부터 destinationArray 끝까지의 요소 수보다 큽니다.

설명

sourceArraydestinationArray 매개 변수의 차원 수는 같아야 합니다. 또한 는 destinationArray 이미 차원화되어 있어야 하며 복사된 데이터를 수용하기 위해 위치에서 시작하는 destinationIndex 충분한 수의 요소가 있어야 합니다.

다차원 배열 간에 복사할 때 배열은 긴 1차원 배열처럼 동작하며, 여기서 행(또는 열)은 개념적으로 종단 간 배치됩니다. 예를 들어 배열에 각각 4개의 요소가 있는 세 개의 행(또는 열)이 있는 경우 배열의 시작 부분에서 6개의 요소를 복사하면 첫 번째 행(또는 열)의 4개 요소와 두 번째 행(또는 열)의 처음 두 요소가 모두 복사됩니다. 세 번째 행(또는 열) sourceIndex 의 두 번째 요소에서 복사를 시작하려면 첫 번째 행(또는 열)의 상한과 두 번째 행(또는 열)의 길이와 2를 더한 값이어야 합니다.

destinationArray 가 겹치면 sourceArray 이 메서드는 가 덮어쓰기 전에 destinationArraysourceArray 원래 값이 임시 위치에 유지된 것처럼 동작합니다.

[C++]

이 메서드는 가 아닌 memcpy표준 C/C++ 함수memmove와 동일합니다.

배열은 참조 형식 배열 또는 값 형식 배열일 수 있습니다. 필요에 따라 형식 다운캐스팅이 수행됩니다.

  • 참조 형식 배열에서 값 형식 배열로 복사할 때 각 요소는 언박싱된 다음 복사됩니다. 값 형식 배열에서 참조 형식 배열로 복사할 때 각 요소는 상자가 지정된 다음 복사됩니다.

  • 참조 형식 또는 값 형식 배열에서 배열 Object 로 복사할 Object 때 각 값 또는 참조를 저장할 를 만든 다음 복사합니다. 배열에서 Object 참조 형식 또는 값 형식 배열로 복사할 때 할당이 불가능하면 이 InvalidCastException throw됩니다.

  • destinationArray 가 모두 참조 형식 배열이거나 형식의 Object배열인 경우 sourceArray 단순 복사본이 수행됩니다. 의 Array 단순 복사본은 원본 Array과 동일한 요소에 대한 참조를 포함하는 새 Array 입니다. 요소 자체 또는 요소에서 참조하는 모든 항목은 복사되지 않습니다. 반면, 의 심층 복사본은 Array 요소와 요소에서 직접 또는 간접적으로 참조하는 모든 항목을 복사합니다.

ArrayTypeMismatchException 배열이 호환되지 않는 형식인 경우 이 throw됩니다. 형식 호환성은 다음과 같이 정의됩니다.

  • 형식은 자체와 호환됩니다.

  • 값 형식은 및 와 호환되며 해당 값 형식에 의해 구현된 인터페이스 형식과 호환 Object 됩니다. 값 형식은 해당 인터페이스를 직접 구현하는 경우에만 인터페이스에 연결된 것으로 간주됩니다. 연결이 끊긴 형식은 호환되지 않습니다.

  • 원본 형식에서 대상 형식으로 복사하는 것이 확대 변환인 경우 두 가지 내장(미리 정의된) 값 형식이 호환됩니다. 확대 변환은 정보를 잃지 않는 반면 축소 변환은 정보를 잃을 수 있습니다. 예를 들어 부조 있는 32비트 정수 를 64비트 부제 정수로 변환하는 것은 확대 변환이며, 64비트 부제목을 32비트 부명 정수로 변환하는 것은 축소 변환입니다. 변환에 대한 자세한 내용은 를 참조하세요 Convert.

  • 기본이 아닌(사용자 정의) 값 형식은 자체와만 호환됩니다.

  • 열거형에는 내부 형식으로 Enum 및 로의 암시적 변환이 있습니다.

의 모든 요소에 sourceArray 다운캐스트가 필요한 경우(예: 기본 클래스에서 파생 클래스로 또는 인터페이스에서 개체로) 하나 이상의 요소를 의 destinationArray해당 형식으로 캐스팅할 수 없는 경우 이 InvalidCastException throw됩니다.

복사하는 동안 이 메서드가 예외를 throw하면 의 destinationArray 상태가 정의되지 않습니다.

이 메서드는 O (n) 작업, 여기서 nlength합니다.

추가 정보

적용 대상

Copy(Array, Array, Int32)

Source:
Array.CoreCLR.cs
Source:
Array.cs
Source:
Array.cs

Array의 요소 범위를 첫 번째 요소부터 복사하여 다른 Array에 첫 번째 요소부터 붙여넣습니다. 길이가 32비트 정수로 지정되어 있습니다.

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입니다.

destinationArray
Array

데이터를 받는 Array입니다.

length
Int32

복사할 요소의 개수를 나타내는 32비트 정수입니다.

예외

sourceArraynull입니다.

또는

destinationArray이(가) null인 경우

sourceArraydestinationArray의 차수가 다릅니다.

sourceArraydestinationArray는 호환되지 않는 형식입니다.

sourceArray의 하나 이상의 요소를 destinationArray의 형식으로 캐스팅할 수 없습니다.

length가 0보다 작은 경우

lengthsourceArray의 요소 수보다 큽니다.

또는

lengthdestinationArray의 요소 수보다 큽니다.

설명

sourceArraydestinationArray 매개 변수는 동일한 수의 차원을 가져야 합니다. 또한 는 destinationArray 이미 차원화되어 있어야 하며 복사된 데이터를 수용하기에 충분한 수의 요소가 있어야 합니다.

다차원 배열 간에 복사할 때 배열은 긴 1차원 배열처럼 동작하며, 여기서 행(또는 열)은 개념적으로 종단 간 배치됩니다. 예를 들어 배열에 각각 4개의 요소가 있는 3개의 행(또는 열)이 있는 경우 배열의 시작 부분에서 6개의 요소를 복사하면 첫 번째 행(또는 열)의 4개 요소와 두 번째 행(또는 열)의 처음 두 요소가 모두 복사됩니다.

destinationArray 겹치는 경우 sourceArray 이 메서드는 의 원래 값 sourceArray 이 덮어쓰기 전에 destinationArray 임시 위치에 유지된 것처럼 동작합니다.

[C++]

이 메서드는 가 아닌 memcpy표준 C/C++ 함수memmove와 동일합니다.

배열은 참조 형식 배열 또는 값 형식 배열일 수 있습니다. 필요에 따라 형식 다운캐스팅이 수행됩니다.

  • 참조 형식 배열에서 값 형식 배열로 복사할 때 각 요소는 언박싱된 다음 복사됩니다. 값 형식 배열에서 참조 형식 배열로 복사할 때 각 요소는 상자가 지정된 다음 복사됩니다.

  • 참조 형식 또는 값 형식 배열에서 배열 Object 로 복사할 Object 때 각 값 또는 참조를 저장할 를 만든 다음 복사합니다. 배열에서 Object 참조 형식 또는 값 형식 배열로 복사할 때 할당이 불가능하면 이 InvalidCastException throw됩니다.

  • destinationArray 가 모두 참조 형식 배열이거나 형식의 Object배열인 경우 sourceArray 단순 복사본이 수행됩니다. 의 Array 단순 복사본은 원본 Array과 동일한 요소에 대한 참조를 포함하는 새 Array 입니다. 요소 자체 또는 요소에서 참조하는 모든 항목은 복사되지 않습니다. 반면, 의 심층 복사본은 Array 요소와 요소에서 직접 또는 간접적으로 참조하는 모든 항목을 복사합니다.

ArrayTypeMismatchException 배열이 호환되지 않는 형식인 경우 이 throw됩니다. 형식 호환성은 다음과 같이 정의됩니다.

  • 형식은 자체와 호환됩니다.

  • 값 형식은 및 와 호환되며 해당 값 형식에 의해 구현된 인터페이스 형식과 호환 Object 됩니다. 값 형식은 해당 인터페이스를 직접 구현하는 경우에만 인터페이스에 연결된 것으로 간주됩니다. 연결이 끊긴 형식은 호환되지 않습니다.

  • 원본 형식에서 대상 형식으로 복사하는 것이 확대 변환인 경우 두 가지 내장(미리 정의된) 값 형식이 호환됩니다. 확대 변환은 정보를 잃지 않는 반면 축소 변환은 정보를 잃을 수 있습니다. 예를 들어 부조 있는 32비트 정수 를 64비트 부제 정수로 변환하는 것은 확대 변환이며, 64비트 부제목을 32비트 부명 정수로 변환하는 것은 축소 변환입니다. 변환에 대한 자세한 내용은 를 참조하세요 Convert.

  • 기본이 아닌(사용자 정의) 값 형식은 자체와만 호환됩니다.

  • 열거형에는 내부 형식으로 Enum 및 로의 암시적 변환이 있습니다.

의 모든 요소에 sourceArray 다운캐스트가 필요한 경우(예: 기본 클래스에서 파생 클래스로 또는 인터페이스에서 개체로) 하나 이상의 요소를 의 destinationArray해당 형식으로 캐스팅할 수 없는 경우 이 InvalidCastException throw됩니다.

복사하는 동안 이 메서드가 예외를 throw하면 의 destinationArray 상태가 정의되지 않습니다.

이 메서드는 O (n) 작업, 여기서 nlength합니다.

추가 정보

적용 대상

Copy(Array, Array, Int64)

Source:
Array.cs
Source:
Array.cs
Source:
Array.cs

Array의 요소 범위를 첫 번째 요소부터 복사하여 다른 Array에 첫 번째 요소부터 붙여넣습니다. 길이가 64비트 정수로 지정되어 있습니다.

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입니다.

destinationArray
Array

데이터를 받는 Array입니다.

length
Int64

복사할 요소의 개수를 나타내는 64비트 정수입니다. 정수는 0과 Int32.MaxValue 사이여야 합니다( 포함).

예외

sourceArraynull입니다.

또는

destinationArray이(가) null인 경우

sourceArraydestinationArray의 차수가 다릅니다.

sourceArraydestinationArray는 호환되지 않는 형식입니다.

sourceArray의 하나 이상의 요소를 destinationArray의 형식으로 캐스팅할 수 없습니다.

length 가 0보다 작거나 Int32.MaxValue보다 큽다.

lengthsourceArray의 요소 수보다 큽니다.

또는

lengthdestinationArray의 요소 수보다 큽니다.

설명

sourceArraydestinationArray 매개 변수는 동일한 수의 차원을 가져야 합니다. 또한 는 destinationArray 이미 차원화되어 있어야 하며 복사된 데이터를 수용하기에 충분한 수의 요소가 있어야 합니다.

다차원 배열 간에 복사할 때 배열은 긴 1차원 배열처럼 동작하며, 여기서 행(또는 열)은 개념적으로 종단 간 배치됩니다. 예를 들어 배열에 각각 4개의 요소가 있는 3개의 행(또는 열)이 있는 경우 배열의 시작 부분에서 6개의 요소를 복사하면 첫 번째 행(또는 열)의 4개 요소와 두 번째 행(또는 열)의 처음 두 요소가 모두 복사됩니다.

destinationArray 겹치는 경우 sourceArray 이 메서드는 의 원래 값 sourceArray 이 덮어쓰기 전에 destinationArray 임시 위치에 유지된 것처럼 동작합니다.

[C++]

이 메서드는 가 아닌 memcpy표준 C/C++ 함수memmove와 동일합니다.

배열은 참조 형식 배열 또는 값 형식 배열일 수 있습니다. 필요에 따라 형식 다운캐스팅이 수행됩니다.

  • 참조 형식 배열에서 값 형식 배열로 복사할 때 각 요소는 언박싱된 다음 복사됩니다. 값 형식 배열에서 참조 형식 배열로 복사할 때 각 요소는 상자가 지정된 다음 복사됩니다.

  • 참조 형식 또는 값 형식 배열에서 배열 Object 로 복사할 Object 때 각 값 또는 참조를 저장할 를 만든 다음 복사합니다. 배열에서 Object 참조 형식 또는 값 형식 배열로 복사할 때 할당이 불가능하면 이 InvalidCastException throw됩니다.

  • destinationArray 가 모두 참조 형식 배열이거나 형식의 Object배열인 경우 sourceArray 단순 복사본이 수행됩니다. 의 Array 단순 복사본은 원본 Array과 동일한 요소에 대한 참조를 포함하는 새 Array 입니다. 요소 자체 또는 요소에서 참조하는 모든 항목은 복사되지 않습니다. 반면, 의 심층 복사본은 Array 요소와 요소에서 직접 또는 간접적으로 참조하는 모든 항목을 복사합니다.

ArrayTypeMismatchException 배열이 호환되지 않는 형식인 경우 이 throw됩니다. 형식 호환성은 다음과 같이 정의됩니다.

  • 형식은 자체와 호환됩니다.

  • 값 형식은 및 와 호환되며 해당 값 형식에 의해 구현된 인터페이스 형식과 호환 Object 됩니다. 값 형식은 해당 인터페이스를 직접 구현하는 경우에만 인터페이스에 연결된 것으로 간주됩니다. 연결이 끊긴 형식은 호환되지 않습니다.

  • 원본 형식에서 대상 형식으로 복사하는 것이 확대 변환인 경우 두 가지 내장(미리 정의된) 값 형식이 호환됩니다. 확대 변환은 정보를 잃지 않는 반면 축소 변환은 정보를 잃을 수 있습니다. 예를 들어 부조 있는 32비트 정수 를 64비트 부제 정수로 변환하는 것은 확대 변환이며, 64비트 부제목을 32비트 부명 정수로 변환하는 것은 축소 변환입니다. 변환에 대한 자세한 내용은 를 참조하세요 Convert.

  • 기본이 아닌(사용자 정의) 값 형식은 자체와만 호환됩니다.

  • 열거형에는 내부 형식으로 Enum 및 로의 암시적 변환이 있습니다.

의 모든 요소에 sourceArray 다운캐스트가 필요한 경우(예: 기본 클래스에서 파생 클래스로 또는 인터페이스에서 개체로) 하나 이상의 요소를 의 destinationArray해당 형식으로 캐스팅할 수 없는 경우 이 InvalidCastException throw됩니다.

복사하는 동안 이 메서드가 예외를 throw하면 의 destinationArray 상태가 정의되지 않습니다.

이 메서드는 O (n) 작업, 여기서 nlength합니다.

추가 정보

적용 대상