このコードを使用して、1つの2D配列を別の2D配列にコピーしました。
Array.Copy(teamPerformance, 0,tempPerformance,0, teamPerformance.Length);
ただし、tempPerformance
の一部のデータを変更すると、これらの変更はteamPerformance
にも適用されます。
それを制御するにはどうすればよいですか?
これは正しいです: Array.Copy
はshallowコピーを実行するため、内部次元内の配列のインスタンスは参照によってコピーされます。次のように、LINQを使用してコピーを作成できます。
var copy2d = orig2d.Select(a => a.ToArray()).ToArray();
これが ideoneのデモ です。
Clone()が必要です
double[,] arr =
{
{1, 2},
{3, 4}
};
double[,] copy = arr.Clone() as double[,];
copy[0, 0] = 2;
//it really copies the values, not a shallow copy,
//after:
//arr[0,0] will be 1
//copy[0,0] will be 2
MS( http://msdn.Microsoft.com/en-us/library/z50k9bft.aspx )によると:
SourceArrayとdestinationArrayがどちらも参照型の配列であるか、どちらもObject型の配列である場合、浅いコピーが実行されます。配列の浅いコピーは、元の配列と同じ要素への参照を含む新しい配列です。要素自体または要素によって参照されるものはコピーされません。対照的に、配列のディープコピーは、要素と、要素によって直接または間接的に参照されるすべてのものをコピーします。