繁体   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