2014-04-06 93 views
-2

有沒有辦法將數組添加到數組列表中,而不是通過引用?如何通過值而不是通過引用將數組添加到列表?

例如:以下打印出「6,7,8,9,10」。我希望它寫出「1,2,3,4,5」。

int[] testArray = new int[5] { 1, 2, 3, 4, 5 }; 
List<int[]> testList = new List<int[]>(); 

testList.Add(testArray); 

testArray[0] = 6; 
testArray[1] = 7; 
testArray[2] = 8; 
testArray[3] = 9; 
testArray[4] = 10; 

foreach(int[] array in testList) 
{ 
    Console.WriteLine("{0}, {1}, {2}, {3}, {4}", array[0], array[1], array[2], array[3], array[4]); 
} 
+1

您需要創建數組的一個副本。 – SLaks

+0

所有*都是*按值添加到列表中。你的困惑來自這樣一個事實,即像所有對象一樣,數組在C#中不是值。 'testArray'不是一個對象 - 它是一個*引用*(指向一個對象的指針)。 – newacct

回答

4

製作副本:

testList.Add(testArray.ToArray()); 
1

你必須Clone()陣列即創建陣列的淺拷貝,並補充說,在列表中。

testList.Add((int[])testArray.Clone()); 
1

而不是

testList.Add(testArray); 

使用

testList.Add(testArray.Clone() as int[]); 
+3

'克隆()'返回對象,所以你必須將它轉換回數組。 –

+0

@RohitVats謝謝,更新了答案... – Bogdan

相關問題