C# 将阵列复制到阵列
我对数组有点问题。我是新来的 我尝试将一个Int数组复制到另外两个Int数组中C# 将阵列复制到阵列,c#,arrays,copy,C#,Arrays,Copy,我对数组有点问题。我是新来的 我尝试将一个Int数组复制到另外两个Int数组中 unsortedArray = randomNumbers(); unsortedArray2 = unsortedArray; unsortedArray3 = unsortedArray; 但是,如果我对unsortedarray 2进行排序,unsortedarray 3也会进行排序 有人能帮我吗?数组是一种引用类型,所以当你对第一个数组进行排序时,第二个数组神奇地被排序了。 如果要避免必须复制阵列(使用复
unsortedArray = randomNumbers();
unsortedArray2 = unsortedArray;
unsortedArray3 = unsortedArray;
但是,如果我对unsortedarray 2进行排序,unsortedarray 3也会进行排序
有人能帮我吗?数组是一种引用类型,所以当你对第一个数组进行排序时,第二个数组神奇地被排序了。
如果要避免必须复制阵列(使用复制方法)。可以使用阵列。复制:
unsortedArray = randomNumbers();
Array.Copy(unsortedArray, unsortedArray2 , unsortedArray.Length);
Array.Copy(unsortedArray, unsortedArray3 , unsortedArray.Length);
你正在努力解决的问题并不是C#特有的。这种行为在任何编程语言(JS/Java/Python/C)中几乎都是一样的。变量
unsortedArray2
和unsortedArray3
指向同一内存块,当您重新排序数组时,您只需使用此内存块进行操作
考虑到这一点,我们需要什么来实现您的目标?我们需要复制数组。这可以通过多种方式实现
unsortedArray = randomNumbers();
unsortedArray2 = unsortedArray;
unsortedArray3 = unsortedArray;
首先重要的是,在这方面:
unsortedArray2 = unsortedArray;
您不会将unsortedArray
的值复制到unsortedArray 2
中。=
称为
赋值运算符(=)将其右操作数的值存储在存储位置
要理解这种现象,你需要知道的第二件事是,C#中有两种类型的对象和值类型
文档实际上非常好地解释了这一点:
引用类型的变量存储对其数据(对象)的引用,而值类型的变量直接包含其数据。对于引用类型,两个变量可以引用同一个对象;因此,对一个变量的操作可能会影响另一个变量引用的对象
解决方法可以是使用该方法
这种方法在这种情况下也会起作用
unsortedArray.CopyTo(unsortedArray2 , 0);
注意:这将起作用,因为数组的内容是值类型!如果它也是引用类型,更改其中一个项的子值也会导致目标数组中的同一项发生更改。虽然这可能无法回答您的名义问题,但您可以使用
List
:
List<int> unsortedArray2 = unsortedArray.ToList();
数组。复制您可能希望阅读有关“按值传递”和“按引用传递”的内容,以了解发生这种情况的原因。您有三个对同一数组的引用。所有三个变量都指向同一个数组。通过一个变量操纵数组也可以通过其他变量看到更改。您的答案没有任何解释。转储代码应该如何帮助开始学习该语言的人!你可以使用Array.Copy:“做什么?”?为什么这能解决问题?为什么首先会出现这个问题?通常我在SAP ABAP中编程,没有数组,只有表:)
unsortedArray2 = unsortedArray;
Array.Copy(unsortedArray, 0, unsortedArray2 , 0, unsortedArray.Length);
unsortedArray.CopyTo(unsortedArray2 , 0);
List<int> unsortedArray2 = unsortedArray.ToList();
int[] unsortedArray2 = new int[unsortedArray.Length];
unsortedArray.CopyTo(unsortedArray2, 0);