0

我声明了一个数组

string[] arr1;
string[] arr2;

在某一点上,我为此分配了价值

arr1 = new string[] { "value1" , "Value2 };
arr2 = arr1;

之后我再次改变 arr1 的值

arr1[0]="value3";
arr1[1]="value4";

现在,如果我检查 arr2,arr1 中的这些变化也会反映出来。

arr2[0] value is "value3";
arr2[1] value is "value4";

它是怎么发生的?

4

2 回答 2

6

数组是 .NET 中的引用类型。当你这样做时,arr2 = arr1你让两个变量都指向内存中的同一个数组。对其中一个元素的任何更改都将直接反映在另一个中。

要制作数组的副本,请使用以下Array.Clone方法:

arr2 = (string[])arr1.Clone();

或 Linq 的Enumerable.ToArray方法:

arr2 = arr1.ToArray();
于 2013-04-06T05:17:44.200 回答
1

因为arr2是引用arr1所以arr2是指向arr1内存中的。每一次改变arr1都会体现到arr2

于 2013-04-06T05:18:48.267 回答