c# initialize 將一個二維數組複製到另一個二維數組




c# list 2d array (3)

這是正確的: Array.Copy執行拷貝,所以內部維度內的數組實例被引用複制。 您可以使用LINQ來創建副本,如下所示:

var copy2d = orig2d.Select(a => a.ToArray()).ToArray();

這是一個關於ideone演示

我用這個代碼複製一個二維數組到另一個二維數組:

Array.Copy(teamPerformance, 0,tempPerformance,0, teamPerformance.Length);

但是,當我更改tempPerformance某些數據時,這些更改也適用於teamPerformance
我應該怎麼做才能控制?


Answer #1

你需要克隆()

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

Answer #2

根據MS( http://msdn.microsoft.com/en-us/library/z50k9bft.aspx ):

如果sourceArray和destinationArray都是引用類型的數組,或者都是Object類型的數組,則執行淺拷貝。 Array的淺拷貝是一個新的Array,其中包含與原始Array相同的元素的引用。 元素本身或元素引用的任何內容都不會被複製。 相比之下,Array的深層副本會復制由元素直接或間接引用的元素和所有內容。





multidimensional-array