如何处理C#中的结构数组?
我做了一个如何处理C#中的结构数组?,c#,arrays,struct,static,void,C#,Arrays,Struct,Static,Void,我做了一个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("PROCE
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();
}
(i=0;i<12;i++)的
{
模型[i].Render();
}
但是
Render()
函数中的所有12次msgbox表示,它始终“渲染”第一个三角形(模型[0])。当您将某个对象声明为时,它将在对象的所有实例之间共享。首先从结构属性中删除静态修饰符,然后可以在构造函数中创建数组:
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
}
}
什么是
LocaPoint0
、LocalPoint1
和LocalPoint2
?您遗漏了一些可能对问题很重要的代码-构造函数的代码以及定义了LocalPoint[x]
的位置。我们可以从三角形中看到与此问题相关的所有内容吗?LocalPoints的声明方式可能是您的问题。查看构造函数,可以推断LocalPointx
是一个包含x、y和z值的数组。假设数组是结构的一部分,那么发布的代码应该可以工作。如果不是,那么其他代码也会出错。如果没有可以复制的完整代码片段,这是一个猜测游戏。数组在结构中,但它们被声明为静态
——这意味着无论创建多少结构,每个数组只有一个副本。去掉静态
修饰符。