C#复制阵列到阵列

问题描述:

我有数组一个小问题。我是C#中的新成员。C#复制阵列到阵列

我试图将一个int数组复制到其他2个诠释阵列与

unsortedArray = randomNumbers(); 

unsortedArray2 = unsortedArray; 
unsortedArray3 = unsortedArray; 

但是,如果我排序unsortedArray2,该unsortedArray3太排序。

有人能帮助我吗?

+3

Array.Copy https://msdn.microsoft.com/en-us/library/system.array.copy(v=vs.110).aspx – tym32167

+0

您可能想了解“按值传递”和“通过参考“了解为什么会发生这种情况。 – waka

+0

您有三个对同一个数组的引用。所以你所有的三个变量指向同一个数组。通过一个变量来操纵数组也会使变化通过其他变量可见。 – Oliver

我尝试复制一个int数组到另外两个Int数组中

重要的第一件事是在这一行中:

unsortedArray2 = unsortedArray; 

您不会将unsortedArray的值复制到unsortedArray2。该=被称为assignment operator

赋值运算符(=)存储在存储位置的右侧操作数的值,

现在,你需要知道的明白这第二件事现象是,目前在C#Reference Types 2种类型的对象和值类型

文档解释了它实际上相当不错:

引用类型的变量存储对其数据(对象)的引用,而值类型的变量直接包含其数据。对于引用类型,两个变量可以引用同一个对象;因此,对一个变量的操作可能会影响另一个变量所引用的对象。

该解决方案可以使用Array.Copy方法。

Array.Copy(unsortedArray, 0, unsortedArray2 , 0, unsortedArray.Length); 

CopyTo方法也将在这种情况下工作

unsortedArray.CopyTo(unsortedArray2 , 0); 

注:这会不会起作用,因为该数组的内容是值类型!如果它也是引用类型,则更改其中一个项目的子值也会导致目标数组中相同项目的更改。

阵列是一个引用类型,所以当你排序的第一个,神奇第二个已排序。 如果你想避免你必须复制你的数组(使用复制方法)。

unsortedArray = randomNumbers(); 

unsortedArray2 = unsortedArray.Clone; 
unsortedArray.CopyTo(unsortedArray2, 0); 

unsortedArray3 = unsortedArray.Clone; 
unsortedArray.CopyTo(unsortedArray3, 0); 

Array.Sort(unsortedArray2); 
+2

你的回答没有任何解释。倾销代码应该如何帮助一些正在开始学习该语言的人?=! –

您可以使用Array.Copy:

unsortedArray = randomNumbers(); 

Array.Copy(unsortedArray, unsortedArray2 , unsortedArray.Length); 
Array.Copy(unsortedArray, unsortedArray3 , unsortedArray.Length); 
+0

“你可以使用Array.Copy:”做什么?为什么这会解决问题?为什么问题首先出现? –

你正在努力的问题是不是C#具体。几乎所有的编程语言(JS/Java/Python/C)的行为都是一样的。变量unsortedArray2unsortedArray3指向相同的内存块,当你重新排序数组,你只是这个记忆件操纵。

考虑到这一点,我们需要什么来实现你的目标是什么?我们需要复制数组。它可以通过多种方式来实现

  1. Array.Copy
  2. 创建新的数组和复制的元素逐一进行循环
  3. 的LINQ
+0

正常我在SAP ABAP中编程,没有数组只有表:) – ARX