[英]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.