Clone
メソッド
Clone
メソッドを使うと簡単に配列のコピーができます。
使い方は次のような感じです。
using System;
public class Example1
{
static public void Main ()
{
string[] ar1 = { "aaa", "bbb", "ccc" };
string[] ar2 = (string[])ar1.Clone();
ar2[0] = "AAA";
Console.WriteLine("ar1:");
foreach(var e in ar1) Console.WriteLine(e);
Console.WriteLine("ar2:");
foreach(var e in ar2) Console.WriteLine(e);
}
}
実行結果
ar1:
aaa
bbb
ccc
ar2:
AAA
bbb
ccc
多次元配列
多次元配列でも同様にClone
できます。
using System;
public class Example2
{
static public void Main ()
{
string[,] ar1 = { {"aaa", "bbb"}, {"ccc", "ddd"} };
string[,] ar2 = (string[,])ar1.Clone();
ar2[0,0] = "AAA";
Console.WriteLine("ar1:");
foreach(var e in ar1) Console.WriteLine(e);
Console.WriteLine("ar2:");
foreach(var e in ar2) Console.WriteLine(e);
}
}
実行結果
ar1:
aaa
bbb
ccc
ddd
ar2:
AAA
bbb
ccc
ddd
shallow copy
Clone
メソッドは便利ですが、deep copyではなくshallow copyになっている点には注意してください。
using System;
public class C
{
public string s;
public override string ToString() => s;
}
public class Example3
{
static public void Main ()
{
C c = new C();
c.s = "aaa";
C[] ar1 = { c, c };
C[] ar2 = (C[])ar1.Clone();
ar2[0].s = "AAA";
Console.WriteLine("ar1:");
foreach(var e in ar1) Console.WriteLine(e);
Console.WriteLine("ar2:");
foreach(var e in ar2) Console.WriteLine(e);
}
}
実行結果
ar1:
AAA
AAA
ar2:
AAA
AAA
リンク
Array.Clone Method (System) | Microsoft Docs
https://docs.microsoft.com/en-us/dotnet/api/system.array.clone?view=netcore-3.1