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)
- ソース:
- Array.cs
- ソース:
- Array.cs
- ソース:
- Array.cs
public:
static void Copy(Array ^ sourceArray, long sourceIndex, Array ^ destinationArray, long destinationIndex, long length);
public static void Copy (Array sourceArray, long sourceIndex, Array destinationArray, long destinationIndex, long length);
static member Copy : Array * int64 * Array * int64 * int64 -> unit
Public Shared Sub Copy (sourceArray As Array, sourceIndex As Long, destinationArray As Array, destinationIndex As Long, length As Long)
パラメーター
- sourceIndex
- Int64
コピー操作の開始位置となる sourceArray
内のインデックスを表す 64 ビット整数。
- destinationIndex
- Int64
格納を開始する destinationArray
のインデックスを表す 64 ビット整数。
- length
- Int64
コピーする要素の数を表す 64 ビット整数。 整数は、0 から Int32.MaxValue までの範囲で指定する必要があります。
例外
sourceArray
と destinationArray
のランクが異なります。
sourceArray
と destinationArray
の型は互換性がありません。
sourceArray
の少なくとも 1 つの要素が destinationArray
の型にキャストできません。
sourceIndex
は sourceArray
の有効なインデックスの範囲外です。
- または -
destinationIndex
は destinationArray
の有効なインデックスの範囲外です。
- または -
length
が 0 より小さいか 、Int32.MaxValue より大きい。
length
は sourceIndex
から最後の sourceArray
までの要素の数を超えています。
- または -
length
は destinationIndex
から最後の destinationArray
までの要素の数を超えています。
注釈
sourceArray
パラメーターと destinationArray
パラメーターには、同じ数のディメンションが必要です。 さらに、 は既にディメンション化されている必要があり、 destinationArray
コピーされたデータに対応するために、位置から destinationIndex
始まる十分な数の要素を持っている必要があります。
多次元配列間でコピーする場合、配列は長い 1 次元配列のように動作します。ここで、行 (または列) は概念的にエンドツーエンドで配置されます。 たとえば、配列に 3 つの行 (または列) があり、それぞれ 4 つの要素がある場合、配列の先頭から 6 つの要素をコピーすると、最初の行 (または列) の 4 つの要素と、2 番目の行 (または列) の最初の 2 つの要素がすべてコピーされます。 3 番目の行 (または列) sourceIndex
の 2 番目の要素からコピーを開始するには、最初の行 (または列) の上限に 2 行目 (または列) の長さに 2 を加えたものにする必要があります。
と destinationArray
が重複している場合sourceArray
、このメソッドは、 の元のsourceArray
値が上書きされる前destinationArray
に一時的な場所に保持されたかのように動作します。
[C++]
このメソッドは、 ではなくmemcpy
、標準の C/C++ 関数memmove
と同じです。
配列には、参照型配列または値型配列を指定できます。 型のダウンキャストは、必要に応じて実行されます。
参照型配列から値型配列にコピーすると、各要素はボックス化解除され、コピーされます。 値型配列から参照型配列にコピーすると、各要素がボックス化されてコピーされます。
参照型または値型の配列から配列に Object コピーする場合、 Object 各値または参照を保持する が作成され、コピーされます。 配列から Object 参照型または値型の配列にコピーし、代入できない場合は、 InvalidCastException がスローされます。
と
destinationArray
が両方の参照型配列であるか、両方の型Objectの配列である場合sourceArray
は、シャロー コピーが実行されます。 の浅いコピーは、元Arrayの Array と同じ要素への参照を含む新しい Array です。 要素自体または要素によって参照されるものはコピーされません。 これに対し、 のディープ コピーは Array 要素と、要素によって直接または間接的に参照されるすべてをコピーします。
ArrayTypeMismatchException配列が互換性のない型の場合、 がスローされます。 型の互換性は次のように定義されます。
型はそれ自体と互換性があります。
値型は、 および と互換性があり、その値型によって実装されるインターフェイス型と互換性があります Object 。 値型は、そのインターフェイスが直接実装されている場合にのみ、インターフェイスに接続されていると見なされます。 切断された型には互換性がありません。
ソース型からコピー先の型へのコピーが拡大変換である場合、2 つの組み込み (定義済み) 値型に互換性があります。 拡大変換では情報が失われることはありませんが、縮小変換では情報が失われる可能性があります。 たとえば、32 ビット符号付き整数を 64 ビット符号付き整数に変換することは拡大変換であり、64 ビット符号付き整数を 32 ビット符号付き整数に変換することは縮小変換です。 変換の詳細については、「」を参照してください Convert。
非intrinsic (ユーザー定義) 値型は、それ自体とのみ互換性があります。
列挙型は、基になる型への Enum 暗黙的な変換と、その基になる型への暗黙的な変換を持っています。
のすべての要素に sourceArray
ダウンキャストが必要な場合 (基本クラスから派生クラス、またはオブジェクトへのインターフェイスなど) で、1 つ以上の要素を の destinationArray
対応する型にキャストできない場合は、 InvalidCastException がスローされます。
このメソッドがコピー中に例外をスローした場合、 の destinationArray
状態は未定義です。
このメソッドは O(n
) 操作です。n
は length
です。
こちらもご覧ください
適用対象
Copy(Array, Int32, Array, Int32, Int32)
- ソース:
- Array.CoreCLR.cs
- ソース:
- Array.cs
- ソース:
- Array.cs
public:
static void Copy(Array ^ sourceArray, int sourceIndex, Array ^ destinationArray, int destinationIndex, int length);
public static void Copy (Array sourceArray, int sourceIndex, Array destinationArray, int destinationIndex, int length);
static member Copy : Array * int * Array * int * int -> unit
Public Shared Sub Copy (sourceArray As Array, sourceIndex As Integer, destinationArray As Array, destinationIndex As Integer, length As Integer)
パラメーター
- sourceIndex
- Int32
コピー操作の開始位置となる sourceArray
内のインデックスを表す 32 ビット整数。
- destinationIndex
- Int32
格納を開始する destinationArray
のインデックスを表す 32 ビット整数。
- length
- Int32
コピーする要素の数を表す 32 ビット整数。
例外
sourceArray
と destinationArray
のランクが異なります。
sourceArray
と destinationArray
の型は互換性がありません。
sourceArray
の少なくとも 1 つの要素が destinationArray
の型にキャストできません。
sourceIndex
は sourceArray
の最初の次元の下限を下回っています。
- または -
destinationIndex
は destinationArray
の最初の次元の下限を下回っています。
- または -
length
が 0 未満です。
length
は sourceIndex
から最後の sourceArray
までの要素の数を超えています。
- または -
length
は destinationIndex
から最後の destinationArray
までの要素の数を超えています。
注釈
sourceArray
パラメーターと destinationArray
パラメーターには、同じ数のディメンションが必要です。 さらに、 は既にディメンション化されている必要があり、 destinationArray
コピーされたデータに対応するために、位置から destinationIndex
始まる十分な数の要素を持っている必要があります。
多次元配列間でコピーする場合、配列は長い 1 次元配列のように動作します。ここで、行 (または列) は概念的にエンドツーエンドで配置されます。 たとえば、配列に 3 つの行 (または列) があり、それぞれ 4 つの要素がある場合、配列の先頭から 6 つの要素をコピーすると、最初の行 (または列) の 4 つの要素と、2 番目の行 (または列) の最初の 2 つの要素がすべてコピーされます。 3 番目の行 (または列) sourceIndex
の 2 番目の要素からコピーを開始するには、最初の行 (または列) の上限に 2 行目 (または列) の長さに 2 を加えたものにする必要があります。
と destinationArray
が重複している場合sourceArray
、このメソッドは、 の元のsourceArray
値が上書きされる前destinationArray
に一時的な場所に保持されたかのように動作します。
[C++]
このメソッドは、 ではなくmemcpy
、標準の C/C++ 関数memmove
と同じです。
配列には、参照型配列または値型配列を指定できます。 型ダウンキャストは、必要に応じて実行されます。
参照型配列から値型配列にコピーする場合、各要素はボックス化解除されてからコピーされます。 値型配列から参照型配列にコピーすると、各要素がボックス化されてコピーされます。
参照型または値型の配列から配列に Object コピーする場合は、 Object 各値または参照を保持する が作成され、コピーされます。 配列から Object 参照型または値型の配列にコピーし、代入できない場合は、 InvalidCastException がスローされます。
と
destinationArray
が両方とも参照型の配列であるか、両方とも 型Objectの配列である場合sourceArray
は、シャロー コピーが実行されます。 のシャロー コピーは、元Arrayの Array と同じ要素への参照を含む新しい Array です。 要素自体または要素によって参照されるものはコピーされません。 これに対し、 のディープ コピーでは Array 、要素とその要素によって直接または間接的に参照されるすべてのものがコピーされます。
ArrayTypeMismatchException配列が互換性のない型の場合、 がスローされます。 型の互換性は次のように定義されます。
型はそれ自体と互換性があります。
値型は、 とその値型によって実装されるインターフェイス型と互換性があります Object 。 値型は、そのインターフェイスを直接実装する場合にのみ、インターフェイスに接続されていると見なされます。 切断された型には互換性がありません。
コピー元の型からコピー先の型へのコピーが拡大変換である場合、2 つの組み込み (定義済み) 値型に互換性があります。 拡大変換では情報が失われることはありませんが、縮小変換では情報が失われる可能性があります。 たとえば、32 ビット符号付き整数を 64 ビット符号付き整数に変換することは拡大変換であり、64 ビット符号付き整数を 32 ビット符号付き整数に変換することは縮小変換です。 変換の詳細については、「」を参照してください Convert。
非intrinsic (ユーザー定義) 値型は、それ自体とのみ互換性があります。
列挙型は、基になる型への Enum 暗黙的な変換と、その基になる型への暗黙的な変換を持っています。
のすべての要素に sourceArray
ダウンキャスト (基底クラスから派生クラス、またはインターフェイスからオブジェクトへのなど) が必要で、1 つ以上の要素を の destinationArray
対応する型にキャストできない場合は、 InvalidCastException がスローされます。
このメソッドがコピー中に例外をスローした場合、 の destinationArray
状態は未定義です。
このメソッドは O(n
) 操作です。n
は length
です。
こちらもご覧ください
適用対象
Copy(Array, Array, Int32)
- ソース:
- Array.CoreCLR.cs
- ソース:
- Array.cs
- ソース:
- Array.cs
public:
static void Copy(Array ^ sourceArray, Array ^ destinationArray, int length);
public static void Copy (Array sourceArray, Array destinationArray, int length);
static member Copy : Array * Array * int -> unit
Public Shared Sub Copy (sourceArray As Array, destinationArray As Array, length As Integer)
パラメーター
- length
- Int32
コピーする要素の数を表す 32 ビット整数。
例外
sourceArray
と destinationArray
のランクが異なります。
sourceArray
と destinationArray
の型は互換性がありません。
sourceArray
の少なくとも 1 つの要素が destinationArray
の型にキャストできません。
length
が 0 未満です。
length
は sourceArray
にある要素の数を超えています。
- または -
length
は destinationArray
にある要素の数を超えています。
注釈
sourceArray
パラメーターと destinationArray
パラメーターには、同じ数のディメンションが必要です。 さらに、 は既にディメンション化されている必要があり、 destinationArray
コピーされたデータに対応するのに十分な数の要素が必要です。
多次元配列間でコピーする場合、配列は長い 1 次元配列のように動作します。ここで、行 (または列) は概念的には末尾に配置されます。 たとえば、配列に 3 つの行 (または列) があり、それぞれに 4 つの要素がある場合、配列の先頭から 6 つの要素をコピーすると、最初の行 (または列) の 4 つの要素すべてと、2 番目の行 (または列) の最初の 2 つの要素がコピーされます。
と destinationArray
が重複している場合sourceArray
、このメソッドは、 の元のsourceArray
値が上書きされる前destinationArray
に一時的な場所に保持されたかのように動作します。
[C++]
このメソッドは、 ではなくmemcpy
、標準の C/C++ 関数memmove
と同じです。
配列には、参照型配列または値型配列を指定できます。 型ダウンキャストは、必要に応じて実行されます。
参照型配列から値型配列にコピーする場合、各要素はボックス化解除されてからコピーされます。 値型配列から参照型配列にコピーすると、各要素がボックス化されてコピーされます。
参照型または値型の配列から配列に Object コピーする場合は、 Object 各値または参照を保持する が作成され、コピーされます。 配列から Object 参照型または値型の配列にコピーし、代入できない場合は、 InvalidCastException がスローされます。
と
destinationArray
が両方とも参照型の配列であるか、両方とも 型Objectの配列である場合sourceArray
は、シャロー コピーが実行されます。 のシャロー コピーは、元Arrayの Array と同じ要素への参照を含む新しい Array です。 要素自体または要素によって参照されるものはコピーされません。 これに対し、 のディープ コピーでは Array 、要素とその要素によって直接または間接的に参照されるすべてのものがコピーされます。
ArrayTypeMismatchException配列が互換性のない型の場合、 がスローされます。 型の互換性は次のように定義されます。
型はそれ自体と互換性があります。
値型は、 とその値型によって実装されるインターフェイス型と互換性があります Object 。 値型は、そのインターフェイスを直接実装する場合にのみ、インターフェイスに接続されていると見なされます。 切断された型には互換性がありません。
コピー元の型からコピー先の型へのコピーが拡大変換である場合、2 つの組み込み (定義済み) 値型に互換性があります。 拡大変換では情報が失われることはありませんが、縮小変換では情報が失われる可能性があります。 たとえば、32 ビット符号付き整数を 64 ビット符号付き整数に変換することは拡大変換であり、64 ビット符号付き整数を 32 ビット符号付き整数に変換することは縮小変換です。 変換の詳細については、「」を参照してください Convert。
非intrinsic (ユーザー定義) 値型は、それ自体とのみ互換性があります。
列挙型は、基になる型への Enum 暗黙的な変換と、その基になる型への暗黙的な変換を持っています。
のすべての要素に sourceArray
ダウンキャスト (基底クラスから派生クラス、またはインターフェイスからオブジェクトへのなど) が必要で、1 つ以上の要素を の destinationArray
対応する型にキャストできない場合は、 InvalidCastException がスローされます。
このメソッドがコピー中に例外をスローした場合、 の destinationArray
状態は未定義です。
このメソッドは O(n
) 操作です。n
は length
です。
こちらもご覧ください
適用対象
Copy(Array, Array, Int64)
- ソース:
- Array.cs
- ソース:
- Array.cs
- ソース:
- Array.cs
public:
static void Copy(Array ^ sourceArray, Array ^ destinationArray, long length);
public static void Copy (Array sourceArray, Array destinationArray, long length);
static member Copy : Array * Array * int64 -> unit
Public Shared Sub Copy (sourceArray As Array, destinationArray As Array, length As Long)
パラメーター
- length
- Int64
コピーする要素の数を表す 64 ビット整数。 整数は、0 から Int32.MaxValue までの範囲で指定する必要があります。
例外
sourceArray
と destinationArray
のランクが異なります。
sourceArray
と destinationArray
の型は互換性がありません。
sourceArray
の少なくとも 1 つの要素が destinationArray
の型にキャストできません。
length
が 0 より小さいか 、Int32.MaxValue より大きい。
length
は sourceArray
にある要素の数を超えています。
- または -
length
は destinationArray
にある要素の数を超えています。
注釈
sourceArray
パラメーターと destinationArray
パラメーターには、同じ数のディメンションが必要です。 さらに、 は既にディメンション化されている必要があり、 destinationArray
コピーされたデータに対応するのに十分な数の要素が必要です。
多次元配列間でコピーする場合、配列は長い 1 次元配列のように動作します。ここで、行 (または列) は概念的には末尾に配置されます。 たとえば、配列に 3 つの行 (または列) があり、それぞれに 4 つの要素がある場合、配列の先頭から 6 つの要素をコピーすると、最初の行 (または列) の 4 つの要素すべてと、2 番目の行 (または列) の最初の 2 つの要素がコピーされます。
と destinationArray
が重複している場合sourceArray
、このメソッドは、 の元のsourceArray
値が上書きされる前destinationArray
に一時的な場所に保持されたかのように動作します。
[C++]
このメソッドは、 ではなくmemcpy
、標準の C/C++ 関数memmove
と同じです。
配列には、参照型配列または値型配列を指定できます。 型ダウンキャストは、必要に応じて実行されます。
参照型配列から値型配列にコピーする場合、各要素はボックス化解除されてからコピーされます。 値型配列から参照型配列にコピーすると、各要素がボックス化されてコピーされます。
参照型または値型の配列から配列に Object コピーする場合、 Object 各値または参照を保持する が作成され、コピーされます。 配列から Object 参照型または値型の配列にコピーし、代入できない場合は、 InvalidCastException がスローされます。
と
destinationArray
が両方の参照型配列であるか、両方の型Objectの配列である場合sourceArray
は、シャロー コピーが実行されます。 の浅いコピーは、元Arrayの Array と同じ要素への参照を含む新しい Array です。 要素自体または要素によって参照されるものはコピーされません。 これに対し、 のディープ コピーは Array 要素と、要素によって直接または間接的に参照されるすべてをコピーします。
ArrayTypeMismatchException配列が互換性のない型の場合、 がスローされます。 型の互換性は次のように定義されます。
型はそれ自体と互換性があります。
値型は、 および と互換性があり、その値型によって実装されるインターフェイス型と互換性があります Object 。 値型は、そのインターフェイスが直接実装されている場合にのみ、インターフェイスに接続されていると見なされます。 切断された型には互換性がありません。
ソース型からコピー先の型へのコピーが拡大変換である場合、2 つの組み込み (定義済み) 値型に互換性があります。 拡大変換では情報が失われることはありませんが、縮小変換では情報が失われる可能性があります。 たとえば、32 ビット符号付き整数を 64 ビット符号付き整数に変換することは拡大変換であり、64 ビット符号付き整数を 32 ビット符号付き整数に変換することは縮小変換です。 変換の詳細については、「」を参照してください Convert。
非intrinsic (ユーザー定義) 値型は、それ自体とのみ互換性があります。
列挙型は、基になる型への Enum 暗黙的な変換と、その基になる型への暗黙的な変換を持っています。
のすべての要素に sourceArray
ダウンキャストが必要な場合 (基本クラスから派生クラス、またはオブジェクトへのインターフェイスなど) で、1 つ以上の要素を の destinationArray
対応する型にキャストできない場合は、 InvalidCastException がスローされます。
このメソッドがコピー中に例外をスローした場合、 の destinationArray
状態は未定義です。
このメソッドは O(n
) 操作です。n
は length
です。
こちらもご覧ください
適用対象
.NET