C#复制阵列到阵列
我有数组一个小问题。我是C#中的新成员。C#复制阵列到阵列
我试图将一个int数组复制到其他2个诠释阵列与
unsortedArray = randomNumbers();
unsortedArray2 = unsortedArray;
unsortedArray3 = unsortedArray;
但是,如果我排序unsortedArray2,该unsortedArray3太排序。
有人能帮助我吗?
我尝试复制一个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);
你的回答没有任何解释。倾销代码应该如何帮助一些正在开始学习该语言的人?=! –
您可以使用Array.Copy:
unsortedArray = randomNumbers();
Array.Copy(unsortedArray, unsortedArray2 , unsortedArray.Length);
Array.Copy(unsortedArray, unsortedArray3 , unsortedArray.Length);
“你可以使用Array.Copy:”做什么?为什么这会解决问题?为什么问题首先出现? –
你正在努力的问题是不是C#具体。几乎所有的编程语言(JS/Java/Python/C)的行为都是一样的。变量unsortedArray2
和unsortedArray3
指向相同的内存块,当你重新排序数组,你只是这个记忆件操纵。
考虑到这一点,我们需要什么来实现你的目标是什么?我们需要复制数组。它可以通过多种方式来实现
- Array.Copy
- 创建新的数组和复制的元素逐一进行循环
- 的LINQ
正常我在SAP ABAP中编程,没有数组只有表:) – ARX
Array.Copy https://msdn.microsoft.com/en-us/library/system.array.copy(v=vs.110).aspx – tym32167
您可能想了解“按值传递”和“通过参考“了解为什么会发生这种情况。 – waka
您有三个对同一个数组的引用。所以你所有的三个变量指向同一个数组。通过一个变量来操纵数组也会使变化通过其他变量可见。 – Oliver