2013-04-06 33 views
0

我聲明如下數據不匹配時,兩者都等於

string[] arr1; 
string[] arr2; 

陣列在一個點上我assigend價值爲

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

它是怎麼發生的?

+0

公平! arr2只是arr1的參考。 – David 2013-04-06 05:18:03

回答

6

數組是.NET中的引用類型。當你做了arr2 = arr1時,你讓兩個變量都指向了內存中的同一個數組。一個元素的任何改變都會直接反映在另一個元素中。

爲了使陣列的副本,使用Array.Clone方法:

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

或LINQ的Enumerable.ToArray方法:

arr2 = arr1.ToArray(); 
+0

因此,arr1中的所有更改都會反映arr2而不更改arr2。 如果更改了arr2,它會反映arr1對嗎? – Raj 2013-04-06 05:19:25

+0

@Raj,這是正確的 – 2013-04-06 05:20:11

1

因爲arr2是參照arr1所以arr2是指向arr1在存儲器。 arr1的每次更改都會反映到arr2