循环后所有元素相同
本文关键字:元素 循环 | 更新日期: 2023-09-27 18:06:53
我想给数组中的元素赋值。运行此命令后,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
变量。当您执行"列表"时。你只是给它添加了一个引用,所有这些引用(显然)都是一样的。您还可以修改它,使每个相同的引用在逻辑上指向相同的数据。
相反,写:
System.Collections.ArrayList List = new System.Collections.ArrayList();
for (int i = 0; i < nROIrow; i++)
{
DataPoint TempRes = new DataPoint();
...
还请注意,ArrayList
通常被认为自。net 2.0以来已弃用,您应该使用List<T>
。
do
disp = new ... // whatever
赋值给disp[i].???
实际上正在发生的事情是你的List
中的所有引用都指向disp
,这是在for循环之外创建的单个对象,因此List
中的所有项目都指向相同的disp
对象,因此相同的值。