Array.Copyメソッドは、Array.Cloneメソッドとは異なり配列の内容を既に存在する別の配列に複写します。 引数で複写する長さ(要素数)を指定できるので、配列の途中までをコピーするということも出来ます。 当然、複写先の配列は複写元と同じがそれ以上の長さを持っている必要があります。 Array.Copyメソッドも、Array.Cloneメソッドと同様要素の簡易コピーを行います。
Array.Copyメソッドで1次元配列を別の配列に複写する
using System;
class Sample {
static void Main()
{
// 複写元の配列
int[] arr1 = {0, 1, 2, 3, 4};
// 初期化されていない配列を確保
var arr2 = new int[5];
foreach (var elem in arr2) {
Console.Write("{0}, ", elem);
}
Console.WriteLine();
// arr1の要素の先頭から3個分をarr2に複写
Array.Copy(arr1, arr2, 3);
foreach (var elem in arr2) {
Console.Write("{0}, ", elem);
}
Console.WriteLine();
// arr1の全要素をarr2に複写
Array.Copy(arr1, arr2, arr1.Length);
foreach (var elem in arr2) {
Console.Write("{0}, ", elem);
}
Console.WriteLine();
}
}
実行結果
0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, 1, 2, 3, 4,
配列のバイト表現を別の配列へ転写する目的(バイト列としてのコピー)にはBuffer.BlockCopyメソッドを使うことができます。 詳しくはバイト列操作 §.BlockCopyメソッドを参照してください。
Array.Copyメソッドは、複写元と複写先に同じ配列を指定することができます。 またArray.Copyメソッドの動作は、memcpy
ではなくmemmove
相当の動作になります。 詳しくは§.同一配列への複写を参照してください。