【问题标题】:How to handle array of structures in C#?如何在 C# 中处理结构数组?
【发布时间】:2014-11-01 23:11:00
【问题描述】:

我发了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 次 msgbox 都说,它总是“渲染”第一个三角形(MODEL[0])。

【问题讨论】:

  • 什么是LocaPoint0LocalPoint1LocalPoint2
  • 您遗漏了一些可能对问题很重要的代码 - 构造函数的代码以及定义 LocalPoint[x] 的位置。
  • 我们能看到 Triangle 中与此问题相关的所有内容吗? LocalPoints 的声明方式可能是您的问题。
  • 看构造函数,可以推断LocalPointx是一个数组,里面保存了x、y、z的值。假设数组是结构的一部分,那么发布的代码应该可以工作。如果不是,那么其他一些代码正在干扰。没有完整的可以复现的代码sn-p,就是猜谜游戏。
  • 数组在结构中,但它们被声明为static - 这意味着无论您创建多少结构,每个数组都只有一个副本。去掉 static 修饰符。

标签: c# arrays struct static void


【解决方案1】:

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

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
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多