我有一个包含3个整数的数组。我想复制数组并更改第一个整数。出于一些神奇的原因,BOTH数组得到了他们的第一个整数调整。我不知道为什么会这样,这让我发疯。
int [] numbers1 = {1, 2, 3}
int [] numbers2 = {3, 4, 5}
numbers2 = numbers1;
此时我做了一个System.Console.Writeline
,看到两个数组现在都是{1,2,3}。到目前为止一切都很好。
numbers1[0] = 4;
当我做System.Console.Writeline
时,我看到BOTH数组现在看起来像{4,2,3}。我希望numbers2保持不变。
答案 0 :(得分:2)
目前您只传递参考资料。数组中的数字存储在内存中。当您在内存中引用对象时,它指向该对象。它在引用时不会在内存中创建新对象,因此您需要将int克隆到另一个数组中,以便它指向内存中的不同对象。
numbers2 = numbers1;
您需要克隆阵列。
numbers2 = (int[])numbers1.Clone();
正如其他人所说,你也可以使用.ToArray()方法。这将创建数组中项目的副本。
numbers2 = numbers1.ToArray();
答案 1 :(得分:1)
数组是引用类型,无论数组的值是否为值类型。
分配数组时,您正在创建数组变量指向的内存块。将一个数组变量分配给另一个时,您将分配内存引用,而不是数组中的值。因此,您的numbers1
和numbers2
数组都指向同一组值。
现在这应该是有道理的。想象一下,如果你有一个包含一百万个元素的数组,那么每次你分配或传递你周围的数组都会产生副本时,这将是一个可怕的性能问题。
因此,您需要明确说明何时要复制数组。
最简单的方法是:
numbers2 = numbers1.ToArray(); // yes, this copies the entire array.
答案 2 :(得分:0)
使用此:
numbers2 = numbers1;
您正在将第一个数组的引用分配给第二个数组。所以它丢失了原始内容并开始指向numbers1
。如果您要将numbers1
的部分或全部项目复制到numbers2
,请使用Clone()
或use loop to copy elements
。
答案 3 :(得分:0)
您是否尝试过.ToArray()
方法?它将创建新数组,而不是通过引用Array2= Array.ToArray();
Click here for more about .ToArrray()
答案 4 :(得分:0)
尝试使用.ToArray();
或Clone
为我工作
我的建议是.ToArray();