复制数组有问题

时间:2010-04-18 16:28:50

标签: c# .net

我有以下代码:

string[] firstArray = { "bla bla", "bla bla", "bla bla"};   
string[] secondArray = {"aaaaaaaaaaaa", "aaaaaaaaaaa", "aaaaaaaaa"};    

string[] newArray = firstArray;

firstArray = secondArray;

foreach (string item in newArray)
{
     Console.WriteLine(item);
} 

此代码给出以下结果:
bla bla
bla bla
bla bla

在将不同的实例分配给firstArray之后,我无法理解为什么newArray具有相同的conntent。请帮帮我。

4 个答案:

答案 0 :(得分:4)

您正在为数组分配引用,而不是数组本身。

string[] firstArray = { "bla bla", "bla bla", "bla bla"};   

firstArray引用了blabla数组。

string[] secondArray = {"aaaaaaaaaaaa", "aaaaaaaaaaa", "aaaaaaaaa"};    

secondArray引用了aaaaaaaaaaaa数组。

string[] newArray = array;

我想某处有一个array = firstArray。 newArray保存对firstArray(blabla)相同数组的引用。

array = secondArray;

数组保存对secondArray(aaaaaaaaaaa)的相同数组的引用。

foreach (string item in newArray)

newArray仍保留对blabla数组的引用,以便打印。

答案 1 :(得分:0)

因为您只更改了对数组的引用。因此newArray将引用firstArray,然后更改firstArray引用,但newArray仍引用前一个blabla数组。

答案 2 :(得分:0)

string[] newArray = array;
array = secondArray;

array是未声明的未定义变量。 我看不到您如何为其分配newArray,或将其设置为secondArray

您还可以参考firstArrayfirstarray,这些都无效。

答案 3 :(得分:0)

我假设当你在代码中写'array'时,你的意思是'firstArray'。

没有变化,因为你根本没有分配给newArray。 newArray是一个参考;当你键入string [] newArray = array时,它指向与firstArray相同的地址。将firstArray分配给secondArray时,只需更改firstArray指向的位置即可。这不会改变newArray指向的位置。

基本概念是C#中的引用变量是指内存地址。这不是平等的想法。也就是说,a = b,你设置b = c,它不会改变a。将其视为

更为恰当
a = address 1
b = address 2
c = address 3

当你做a = b时,

a = address 2
b = address 2
c = address 3

当你做b = c

a = address 2
b = address 3
c = address 3