将一个2D数组复制到另一个2D数组



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

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

然而,当我改变tempPerformance中的一些数据时,这些变化也适用于teamPerformance
我该怎么控制呢?

你需要克隆()

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

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

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

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

如果sourceArray和destinationArray都是引用类型的数组或都是Object类型的数组,则执行浅拷贝。数组的浅拷贝是一个新的数组,它包含对原始数组相同元素的引用。元素本身或元素引用的任何内容都不会被复制。相反,数组的深度拷贝复制元素以及元素直接或间接引用的所有内容。

从我对阅读问题的理解来看,我假设数组中充满了引用类型,但是c#并没有提供一种"只是复制"的方法。一个引用类型。它只会将引用复制到对象(因此,两个东西将指向相同的东西)。

因此,将引用类型放入数组中,然后复制该数组,将不会只是"复制引用类型(因为c#不能这样做,无论是否在数组内)。

这就是为什么这里给出的答案都不能解决问题。Sheng的答案是正确的(但并不能解决问题),而且可能需要更多的解释。

如果你想要复制引用类型,你应该研究这样做的方法。比如,将它们与JSON进行转换,或者自己创建一个复制方法,可能是通过使用反射。

您也可以使用:

int[] copy = new int[old.Length];
Buffer.BlockCopy(old, 0, copy, 0, old.Length * 4];

注意,您必须知道要复制的字节数。除此之外,我也很确定这是非常性能的。

相关内容

  • 没有找到相关文章

最新更新