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