将一个2D阵列复制到另一个2D阵列

use*_*550 17 c# arrays multidimensional-array

我使用此代码将一个2D数组复制到另一个2D数组:

Array.Copy(teamPerformance, 0,tempPerformance,0, teamPerformance.Length);
Run Code Online (Sandbox Code Playgroud)

但是,当我更改某些数据时,tempPerformance这些更改也适用于teamPerformance.
我应该怎么做来控制它?

Ser*_*gan 35

你需要克隆()

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
Run Code Online (Sandbox Code Playgroud)

  • [Clone()](https://docs.microsoft.com/en-us/dotnet/api/system.array.clone?view=netframework-4.8) 通过将每个数组元素的值复制到新数组。对于值类型,这有效地创建了一个深层副本,但它不适用于对象数组或数组数组,就像 dasblinkenlight 的示例一样。[演示](http://ideone.com/SAt7Zl) (3认同)

das*_*ght 15

这是正确的:Array.Copy执行拷贝,因此内部维度内的数组实例通过引用复制.您可以使用LINQ制作副本,如下所示:

var copy2d = orig2d.Select(a => a.ToArray()).ToArray();
Run Code Online (Sandbox Code Playgroud)

这是关于ideone演示.

  • 当然,这仅适用于锯齿状数组,因为“Select()”没有为 2D 数组定义。 (3认同)