C# 如何防止覆盖for循环中的数组项?

C# 如何防止覆盖for循环中的数组项?,c#,arrays,class,for-loop,C#,Arrays,Class,For Loop,我得到的提示是,我的程序使用类结构,而不是大量的数组和矩阵,使其更易于阅读和维护。(我在这里没有找到类似的主题,但可能我使用了错误的词汇。尽管我希望得到帮助) 因为我有一个包含多个条目的数据集,所以我不想拥有所有条目,只想拥有一些特定的条目。因此,我构建了一个类来更轻松地存储它们: public class ControlPoint { // classify necessary variables public double _collimatorangle; publ

我得到的提示是,我的程序使用类结构,而不是大量的数组和矩阵,使其更易于阅读和维护。(我在这里没有找到类似的主题,但可能我使用了错误的词汇。尽管我希望得到帮助)

因为我有一个包含多个条目的数据集,所以我不想拥有所有条目,只想拥有一些特定的条目。因此,我构建了一个类来更轻松地存储它们:

public class ControlPoint
{
    // classify necessary variables
    public double _collimatorangle;
    public double _gantryangle;
    public double[] _jawpositions = new double[4];
    public double _monitorunits;
    public double[] _mlcs = new double[120];
    public double _beamenergy;

    // construct the class
    public ControlPoint()
    {

    }
}
调用和填充它们不是问题,但是我有100多个
ControlPoint
对象,所以我想使用for循环来填充它们,并将它们存储在一个新的数组/list/ArrayList中。最后,我想使用这些数据来计算差异,但是将这个类转换为double是行不通的。所以我写了这个

ControlPoint[] DataPoints = new ControlPoint[160];
ControlPoint CoPos = new ControlPoint();

for (int j = 0; j < 160; j++)
{
    // reading data from file
    // ...
    CoPos._jawpositions[0] = Convert.ToDouble(ReadData_1);
    CoPos._jawpositions[1] = Convert.ToDouble(ReadData_2);
    CoPos._jawpositions[2] = Convert.ToDouble(ReadData_3);
    CoPos._jawpositions[3] = Convert.ToDouble(ReadData_4);

    DataPoints[j] = CoPos;
}
ControlPoint[]数据点=新的控制点[160];
ControlPoint CoPos=新的ControlPoint();
对于(int j=0;j<160;j++)
{
//从文件中读取数据
// ...
CoPos._jawpositions[0]=Convert.ToDouble(ReadData_1);
CoPos._jawpositions[1]=Convert.ToDouble(ReadData_2);
CoPos._jawpositions[2]=Convert.ToDouble(ReadData_3);
CoPos._jawpositions[3]=Convert.ToDouble(ReadData_4);
数据点[j]=COPO;
}
因此,在循环之后,我期望每个数组条目都有一个值不同的
DataPoints
数组。但在调试过程中,我看到将数据更改为实际值,例如在
j=10
DataPoints
中的所有值从0更改为9


我不知道我在哪里做了一个错误的步骤,希望您能帮助我防止这种覆盖。

您只创建了一个
控制点的实例,并对其进行了反复修改,然后将其分配给数组的每个元素。在循环内移动实例化:

for (int j = 0; j < 160; j++)
{
    ControlPoint CoPos = new ControlPoint();

    // reading data from file
    // ...
    CoPos._jawpositions[0] = Convert.ToDouble(ReadData_1);
    CoPos._jawpositions[1] = Convert.ToDouble(ReadData_2);
    CoPos._jawpositions[2] = Convert.ToDouble(ReadData_3);
    CoPos._jawpositions[3] = Convert.ToDouble(ReadData_4);

    DataPoints[j] = CoPos;
}
ControlPoint[] DataPoints = new ControlPoint[160];

for (int j = 0; j < 160; j++)
{
    // reading data from file
    // ...
    var CoPos = new ControlPoint();

    CoPos._jawpositions[0] = Convert.ToDouble(ReadData_1);
    CoPos._jawpositions[1] = Convert.ToDouble(ReadData_2);
    CoPos._jawpositions[2] = Convert.ToDouble(ReadData_3);
    CoPos._jawpositions[3] = Convert.ToDouble(ReadData_4);

    DataPoints[j] = CoPos;
}
for(int j=0;j<160;j++)
{
ControlPoint CoPos=新的ControlPoint();
//从文件中读取数据
// ...
CoPos._jawpositions[0]=Convert.ToDouble(ReadData_1);
CoPos._jawpositions[1]=Convert.ToDouble(ReadData_2);
CoPos._jawpositions[2]=Convert.ToDouble(ReadData_3);
CoPos._jawpositions[3]=Convert.ToDouble(ReadData_4);
数据点[j]=COPO;
}

将相同的CoPos对象分配给DataPoints数组中的每个元素,只改变每个循环上的值。在循环内创建新对象:

for (int j = 0; j < 160; j++)
{
    ControlPoint CoPos = new ControlPoint();

    // reading data from file
    // ...
    CoPos._jawpositions[0] = Convert.ToDouble(ReadData_1);
    CoPos._jawpositions[1] = Convert.ToDouble(ReadData_2);
    CoPos._jawpositions[2] = Convert.ToDouble(ReadData_3);
    CoPos._jawpositions[3] = Convert.ToDouble(ReadData_4);

    DataPoints[j] = CoPos;
}
ControlPoint[] DataPoints = new ControlPoint[160];

for (int j = 0; j < 160; j++)
{
    // reading data from file
    // ...
    var CoPos = new ControlPoint();

    CoPos._jawpositions[0] = Convert.ToDouble(ReadData_1);
    CoPos._jawpositions[1] = Convert.ToDouble(ReadData_2);
    CoPos._jawpositions[2] = Convert.ToDouble(ReadData_3);
    CoPos._jawpositions[3] = Convert.ToDouble(ReadData_4);

    DataPoints[j] = CoPos;
}
ControlPoint[]数据点=新的控制点[160];
对于(int j=0;j<160;j++)
{
//从文件中读取数据
// ...
var CoPos=新的控制点();
CoPos._jawpositions[0]=Convert.ToDouble(ReadData_1);
CoPos._jawpositions[1]=Convert.ToDouble(ReadData_2);
CoPos._jawpositions[2]=Convert.ToDouble(ReadData_3);
CoPos._jawpositions[3]=Convert.ToDouble(ReadData_4);
数据点[j]=COPO;
}