配列のコピーを生成するには、Array.Copyを使うと簡単です。
構文
実現したいコピー方法により引数を使い分けてください。
構文1(コピーする要素数のみ指定してコピーする)
Array.Copy(<コピー元配列>, <コピー先配列>, <コピーする要素数>)
構文2(コピーする位置と要素数を指定してコピーする)
Array.Copy(<コピー元配列>, <コピー元の開始位置>, <コピー先配列>, <コピー先の開始位置>, <コピーする要素数>)
サンプル
例1)配列をコピーする
// コピー元配列
string[] strArr = { "東京", "大阪", "名古屋" };
// コピー先配列を定義する(空の配列)
string[] cpArr = new string[strArr.Length];
// 配列をコピーする
Array.Copy(strArr, cpArr, strArr.Length);
strArr.Lengthで配列の要素数を指定しています。(上例だと3になります)
結果
cpArr → { "東京", "大阪", "名古屋" }
例2)位置を指定して配列をコピーする
// コピー元配列
string[] strArr = { "東京", "大阪", "名古屋", "札幌", "福岡" };
// コピー先配列を定義する(空の配列)
string[] cpArr = new string[strArr.Length];
// 配列をコピーする
Array.Copy(strArr, 2, cpArr, 1, 3);
コピー元の3要素目から3要素分を、コピー先の2要素目以降にコピーします。
結果
cpArr → { null, "名古屋", "札幌", "福岡", null }
[注意!] ダメな例
以下は参照のコピーとなってしまうダメなコピー例です。
// コピー元配列
string[] strArr = { "東京", "大阪", "名古屋" };
// 配列をコピーする →NGです。
string[] cpArr = strArr;
この方法でも一見コピーできたように見えてしまいますが、
この方法だと参照のコピーになってしまいます。
このコピーを行った後に cpArrの値を修正すると、strArrの値も変わってしまいます。
(変数名はstrArrとcpArrで異なりますが、実体は同じ配列を参照しているためです。)
実現したいコピーがこの動きで問題なければよいですが、別々の配列としてコピーしたい場合はArray.Copyをご使用ください。
備考
- 上ではstring配列を例としていますが、他の型の配列もOKです。