2017-04-19 13 views
0

これは解決しようとしている問題の簡略版です。イムはListint[]を追加しようとしているが、それは最後の反復から1でListのすべての配列を更新します。何故ですか?そして、私はこの問題をどうやって解決しますか?これは単なる例の1 intであれば問題ありません。配列にint配列を追加するだけで、配列の最後のバージョンが使用されます

intArray = new int[9]; 

for (int i = 0; i < 9; i++) 
{ 
    intArray[i] = i; 
} 

Test.Add(intArray); 

for (int i = 0; i < 9; i++) 
{ 
    intArray[i] = i * 2; 
} 

Test.Add(intArray); 

foreach (var item in Test) 
{ 
    for (int i = 0; i < 9; i++) 
    { 
     Console.WriteLine(item[i]); 
    } 
} 

Console.ReadKey(); 
} 

public static int[] intArray { get; set; } 
public static List<int[]> Test = new List<int[]>(); 
+7

あなたはただ1つの配列を作成しています。あなたのリストには、同じ配列への参照がたくさん含まれています。今、参照型について学ぶのに良い時期です:http://jonskeet.uk/csharp/references.htmlを見てください。 –

+1

各 'Add'の後に、この行を繰り返すことによって新しい配列をインスタンス化します。' intArray = new int [9]; ' –

答えて

1

あなたは一度だけintArrayを作成newキーワードを使用します。次に、参照は1つだけです。その後、コレクションListintArrayという参照を複数回追加します。 uは、単にその

intArray =新しいint型[長さ]の別のオブジェクトを作成し、あなたのArrayListにあなたのintArrayオブジェクトを追加した後

intArray = new int[9]; 

for (int i = 0; i < 9; i++) 
{ 
    intArray[i] = i; 
} 

Test.Add(intArray); 

intArray = new int[9]; // create new intArray here 

for (int i = 0; i < 9; i++) 
{ 
    intArray[i] = i * 2; 
} 

Test.Add(intArray); 
0

、これを試してみてください。

希望します。

関連する問題