Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将阵列复制到阵列_C#_Arrays_Copy - Fatal编程技术网

C# 将阵列复制到阵列

C# 将阵列复制到阵列,c#,arrays,copy,C#,Arrays,Copy,我对数组有点问题。我是新来的 我尝试将一个Int数组复制到另外两个Int数组中 unsortedArray = randomNumbers(); unsortedArray2 = unsortedArray; unsortedArray3 = unsortedArray; 但是,如果我对unsortedarray 2进行排序,unsortedarray 3也会进行排序 有人能帮我吗?数组是一种引用类型,所以当你对第一个数组进行排序时,第二个数组神奇地被排序了。 如果要避免必须复制阵列(使用复

我对数组有点问题。我是新来的

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

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
指向同一内存块,当您重新排序数组时,您只需使用此内存块进行操作

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

  • 数组。复制
  • 在for循环中创建新数组并逐个复制元素
  • 注意:这些操作在您的案例中是有效的,因为内容是值类型,而不是引用类型

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

    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);