2017-04-19 2 views
0

이것은 해결하려는 문제의 단순화 된 버전입니다. 나는 Listint[]을 추가하려고 시도하지만 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

단 하나의 배열을 만드는 것입니다. 귀하의 목록에 동일한 배열에 대한 많은 참조가 포함되어 있습니다. 이제 참조 유형에 대해 배울 수있는 좋은 시간입니다. 예를 들어 http://jonskeet.uk/csharp/references.html을 참조하십시오. –

+1

각각의'Add' 후에,'intArray = new int [9];'이 라인을 반복하여 새로운 배열을 인스턴스화합니다. –

답변

1

new 키워드를 사용하면 intArray을 한 번만 만듭니다. 그런 다음 하나의 참조 만 있습니다. 그 후 컬렉션 List에 대한 참조를 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

유는 단순히

intArray = 새로운 INT [길이]의 다른 객체를 생성하여 ArrayList를 intArray으로 객체를 첨가 한 후;

희망 하시겠습니까?