Array.Copy 메서드
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
오버로드
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
public:
static void Copy(Array ^ sourceArray, long sourceIndex, Array ^ destinationArray, long destinationIndex, long length);
public static void Copy (Array sourceArray, long sourceIndex, Array destinationArray, long destinationIndex, long length);
static member Copy : Array * int64 * Array * int64 * int64 -> unit
Public Shared Sub Copy (sourceArray As Array, sourceIndex As Long, destinationArray As Array, destinationIndex As Long, length As Long)
매개 변수
- sourceIndex
- Int64
복사가 시작되는 sourceArray
의 인덱스를 나타내는 64비트 정수입니다.
- destinationIndex
- Int64
저장이 시작되는 destinationArray
의 인덱스를 나타내는 64비트 정수입니다.
- length
- Int64
복사할 요소의 개수를 나타내는 64비트 정수입니다. 정수는 0과 Int32.MaxValue 사이여야 합니다( 포함).
예외
sourceArray
와 destinationArray
의 차수가 다릅니다.
sourceArray
와 destinationArray
는 호환되지 않는 형식입니다.
sourceArray
의 하나 이상의 요소를 destinationArray
의 형식으로 캐스팅할 수 없습니다.
sourceIndex
가 sourceArray
의 유효한 인덱스 범위를 벗어납니다.
또는
destinationIndex
가 destinationArray
의 유효한 인덱스 범위를 벗어납니다.
또는
length
가 0보다 작거나 Int32.MaxValue보다 큽 수 있습니다.
length
가 sourceIndex
부터 sourceArray
끝까지의 요소 수보다 큽니다.
또는
length
가 destinationIndex
부터 destinationArray
끝까지의 요소 수보다 큽니다.
설명
sourceArray
및 destinationArray
매개 변수의 차원 수는 같아야 합니다. 또한 는 destinationArray
이미 차원화되어 있어야 하며 복사된 데이터를 수용하기 위해 위치에서 시작하는 destinationIndex
충분한 수의 요소가 있어야 합니다.
다차원 배열 간에 복사할 때 배열은 긴 1차원 배열처럼 동작하며, 여기서 행(또는 열)은 개념적으로 종단 간 배치됩니다. 예를 들어 배열에 각각 4개의 요소가 있는 세 개의 행(또는 열)이 있는 경우 배열의 시작 부분에서 6개의 요소를 복사하면 첫 번째 행(또는 열)의 4개 요소와 두 번째 행(또는 열)의 처음 두 요소가 모두 복사됩니다. 세 번째 행(또는 열) sourceIndex
의 두 번째 요소에서 복사를 시작하려면 첫 번째 행(또는 열)의 상한과 두 번째 행(또는 열)의 길이와 2를 더한 값이어야 합니다.
및 destinationArray
가 겹치면 sourceArray
이 메서드는 가 덮어쓰기 전에 destinationArray
의 sourceArray
원래 값이 임시 위치에 유지된 것처럼 동작합니다.
[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
) 작업, 여기서 n
는 length
합니다.
추가 정보
적용 대상
Copy(Array, Int32, Array, Int32, Int32)
- Source:
- Array.CoreCLR.cs
- Source:
- Array.cs
- Source:
- Array.cs
public:
static void Copy(Array ^ sourceArray, int sourceIndex, Array ^ destinationArray, int destinationIndex, int length);
public static void Copy (Array sourceArray, int sourceIndex, Array destinationArray, int destinationIndex, int length);
static member Copy : Array * int * Array * int * int -> unit
Public Shared Sub Copy (sourceArray As Array, sourceIndex As Integer, destinationArray As Array, destinationIndex As Integer, length As Integer)
매개 변수
- sourceIndex
- Int32
복사가 시작되는 sourceArray
의 인덱스를 나타내는 32비트 정수입니다.
- destinationIndex
- Int32
저장이 시작되는 destinationArray
의 인덱스를 나타내는 32비트 정수입니다.
- length
- Int32
복사할 요소의 개수를 나타내는 32비트 정수입니다.
예외
sourceArray
와 destinationArray
의 차수가 다릅니다.
sourceArray
와 destinationArray
는 호환되지 않는 형식입니다.
sourceArray
의 하나 이상의 요소를 destinationArray
의 형식으로 캐스팅할 수 없습니다.
sourceIndex
가 sourceArray
의 첫 번째 차원 하한값보다 작습니다.
또는
destinationIndex
가 destinationArray
의 첫 번째 차원 하한값보다 작습니다.
또는
length
가 0보다 작은 경우
length
가 sourceIndex
부터 sourceArray
끝까지의 요소 수보다 큽니다.
또는
length
가 destinationIndex
부터 destinationArray
끝까지의 요소 수보다 큽니다.
설명
sourceArray
및 destinationArray
매개 변수의 차원 수는 같아야 합니다. 또한 는 destinationArray
이미 차원화되어 있어야 하며 복사된 데이터를 수용하기 위해 위치에서 시작하는 destinationIndex
충분한 수의 요소가 있어야 합니다.
다차원 배열 간에 복사할 때 배열은 긴 1차원 배열처럼 동작하며, 여기서 행(또는 열)은 개념적으로 종단 간 배치됩니다. 예를 들어 배열에 각각 4개의 요소가 있는 세 개의 행(또는 열)이 있는 경우 배열의 시작 부분에서 6개의 요소를 복사하면 첫 번째 행(또는 열)의 4개 요소와 두 번째 행(또는 열)의 처음 두 요소가 모두 복사됩니다. 세 번째 행(또는 열) sourceIndex
의 두 번째 요소에서 복사를 시작하려면 첫 번째 행(또는 열)의 상한과 두 번째 행(또는 열)의 길이와 2를 더한 값이어야 합니다.
및 destinationArray
가 겹치면 sourceArray
이 메서드는 가 덮어쓰기 전에 destinationArray
의 sourceArray
원래 값이 임시 위치에 유지된 것처럼 동작합니다.
[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
) 작업, 여기서 n
는 length
합니다.
추가 정보
적용 대상
Copy(Array, Array, Int32)
- Source:
- Array.CoreCLR.cs
- Source:
- Array.cs
- Source:
- Array.cs
public:
static void Copy(Array ^ sourceArray, Array ^ destinationArray, int length);
public static void Copy (Array sourceArray, Array destinationArray, int length);
static member Copy : Array * Array * int -> unit
Public Shared Sub Copy (sourceArray As Array, destinationArray As Array, length As Integer)
매개 변수
- length
- Int32
복사할 요소의 개수를 나타내는 32비트 정수입니다.
예외
sourceArray
와 destinationArray
의 차수가 다릅니다.
sourceArray
와 destinationArray
는 호환되지 않는 형식입니다.
sourceArray
의 하나 이상의 요소를 destinationArray
의 형식으로 캐스팅할 수 없습니다.
length
가 0보다 작은 경우
설명
sourceArray
및 destinationArray
매개 변수는 동일한 수의 차원을 가져야 합니다. 또한 는 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
) 작업, 여기서 n
는 length
합니다.
추가 정보
적용 대상
Copy(Array, Array, Int64)
- Source:
- Array.cs
- Source:
- Array.cs
- Source:
- Array.cs
public:
static void Copy(Array ^ sourceArray, Array ^ destinationArray, long length);
public static void Copy (Array sourceArray, Array destinationArray, long length);
static member Copy : Array * Array * int64 -> unit
Public Shared Sub Copy (sourceArray As Array, destinationArray As Array, length As Long)
매개 변수
- length
- Int64
복사할 요소의 개수를 나타내는 64비트 정수입니다. 정수는 0과 Int32.MaxValue 사이여야 합니다( 포함).
예외
sourceArray
와 destinationArray
의 차수가 다릅니다.
sourceArray
와 destinationArray
는 호환되지 않는 형식입니다.
sourceArray
의 하나 이상의 요소를 destinationArray
의 형식으로 캐스팅할 수 없습니다.
length
가 0보다 작거나 Int32.MaxValue보다 큽다.
설명
sourceArray
및 destinationArray
매개 변수는 동일한 수의 차원을 가져야 합니다. 또한 는 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
) 작업, 여기서 n
는 length
합니다.
추가 정보
적용 대상
.NET