如何在C#中处理结构数组

本文关键字:处理 结构 数组 | 更新日期: 2023-09-27 18:28:49

我做了一个struct:

public struct Triangle
{
    public Triangle(double LP0x, double LP0y, double LP0z, double LP1x, double LP1y, double LP1z, double LP2x, double LP2y, double LP2z)
    {
    }
    public void Render()
    {
        MessageBox.Show("PROCESSING:'n"+    LocalPoint0[0].ToString() + LocalPoint0[1].ToString() + LocalPoint0[2].ToString() + "'n" + 
                                            LocalPoint1[0].ToString() + LocalPoint1[1].ToString() + LocalPoint1[2].ToString() + "'n" +
                                            LocalPoint2[0].ToString() + LocalPoint2[1].ToString() + LocalPoint2[2].ToString());
    }
} 

然后我把这个放进数组:

static Triangle[] MODEL = new Triangle[12]{
                               new Triangle(1,1,1,-1,1,1,1,1,-1),
                               new Triangle(1,1,-1,-1,1,-1,-1,1,1),
};

然后我试着处理它:

for (i = 0; i < 12; i++)
{
    MODEL[i].Render();
}

Render()函数的12次消息框都说,它总是"渲染"第一个三角形(MODEL[0])。

如何在C#中处理结构数组

当您将某个东西声明为静态时,它将在对象的所有实例之间共享。首先从结构属性中删除静态修饰符,然后可以在构造函数中创建数组:

private struct Triangle
{
    double[] LocalPoint0;
    double[] LocalPoint1;
    double[] LocalPoint2;
    public Triangle(double LP0x, double LP0y, double LP0z, double LP1x, double LP1y, double LP1z, double LP2x, double LP2y, double LP2z)
    {
        LocalPoint0 = new double[3];
        LocalPoint1 = new double[3];
        LocalPoint2 = new double[3];
        //snip
    }
}