配列は参照型です。 そのため、配列の変数に代入を行う場合、配列がまるごとコピーされて代入されるのではなく、配列への参照が代入されるだけとなる点に注意が必要です。
次の例のように、配列の変数に代入を行っても配列の実体は一つであるため、異なる変数を経由した変更でも実際に行われる変更は同一の配列に対するものとなります。
配列の代入
using System;
class Sample {
static void Main()
{
// 配列を作成してarr1に代入
string[] arr1 = {"Alice", "Bob", "Charlie"};
// arr1の各要素を表示
Console.WriteLine("arr1[0] = {0}", arr1[0]);
Console.WriteLine("arr1[1] = {0}", arr1[1]);
Console.WriteLine("arr1[2] = {0}", arr1[2]);
Console.WriteLine();
// arr1に代入されている配列への参照をarr2に代入
var arr2 = arr1;
arr2[1] = "Dave"; // arr2の1番目の値を変更
// arr1の各要素を表示
Console.WriteLine("arr1[0] = {0}", arr1[0]);
Console.WriteLine("arr1[1] = {0}", arr1[1]);
Console.WriteLine("arr1[2] = {0}", arr1[2]);
}
}
実行結果
arr1[0] = Alice arr1[1] = Bob arr1[2] = Charlie arr1[0] = Alice arr1[1] = Dave arr1[2] = Charlie
配列のコピーを行いたい場合はArray.CloneメソッドまたはArray.Copyメソッドを使います。