2014-06-05 2 views
1

배열의 요소에 값을 할당하려고합니다. 이를 실행하면 ListResults의 모든 요소는 ListROI의 마지막 요소와 동일합니다.루프 이후의 모든 요소가 동일합니다.

ListResults = new DataPoint[nROIrow]; 
DataPoint TempRes = new DataPoint(); 
System.Collections.ArrayList List = new System.Collections.ArrayList(); 

for (int i = 0; i < nROIrow; i++) 
{ 
    TempRes.X = ListROI[i].X; 
    TempRes.Y = ListROI[i].Y; 
    TempRes.u = dispROIcorr[i, 0]; 
    TempRes.v = dispROIcorr[i, 1]; 

    ListResults[i] = TempRes; 

    disp.Xpix = ListResults[i].X; 
    disp.Ypix = ListResults[i].Y; 
    disp.X = ListResults[i].X; 
    disp.Y = ListResults[i].Y; 
    disp.U = ListResults[i].u; 
    disp.V = ListResults[i].v; 

    List.Add(disp); 
    bSAVE.Enabled = true; 
} 

답변

3

new DataPoint();은 한 번만 생성합니다. 따라서 동일한 단일 인스턴스에 대한 참조로 가득 찬 배열로 끝납니다.

간단한 수정 :

ListResults = new DataPoint[nROIrow]; 
//DataPoint TempRes = new DataPoint(); 
System.Collections.ArrayList List = new System.Collections.ArrayList(); 

for (int i = 0; i < nROIrow; i++) 
{ 
    DataPoint TempRes = new DataPoint(); 
    ... 

    ListResults[i] = TempRes; 

    var disp = new ... 
    disp.Xpix = ListResults[i].X; 
    .... 

    List.Add(disp); 
} 
3

코드의 문제는 당신이 TempRes 변수를 재사용한다는 것이다. "List.Add"를 수행하면 참조를 추가하는 것뿐입니다.이 모든 참조는 (분명히) 동일합니다. 또한 각각의 동일한 참조가 논리적으로 동일한 동일한 데이터를 가리 키도록 수정합니다.

대신 쓰기 : 또한 ArrayList은 일반적으로 간주됩니다

System.Collections.ArrayList List = new System.Collections.ArrayList(); 

for (int i = 0; i < nROIrow; i++) 
    { 
    DataPoint TempRes = new DataPoint(); 
    ... 

참고 .NET 2.0부터 사용되지 않습니다되어야하고 대신 List<T>을 사용한다.

0

무슨 일이 일어나고 것은 따라서 루프의 외부에서 생성 된 단일 개체입니다 disp 언급하는 당신의 List의 모든 참조이며, 실제로 disp[i].???

에 값을 할당하기 전에

disp = new ... // whatever 

List의 모든 항목이 동일한 disp 개체를 가리키고 있으므로 동일한 값입니다.

관련 문제