簡體   English   中英

后循環所有元素相同

[英]After loop all elements same

我想給數組的元素賦值。 運行此命令后,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;  
}

您僅創建一個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);
}  

代碼的問題是您正在重用TempRes變量。 當您執行“ List.Add”時,您只是在添加對它的引用,並且所有這些引用(顯然)是相同的。 您還修改了它,因此每個相同的引用在邏輯上都指向相同的相同數據。

相反,寫:

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

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

還要注意,從.NET 2.0開始,通常認為ArrayList已被棄用,而應該使用List<T>

disp = new ... // whatever

在將值分配給disp[i].???

實際上,正在發生的事情是List中的所有引用都引用了disp ,后者是在for循環之外創建的單個對象,因此List中的所有項目都指向相同的disp對象,因此具有相同的值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM