这个数组初始化不正确吗?

时间:2011-05-01 16:05:49

标签: c# .net

public byte[][,] Shapes = 
    {
        {
            {1,1}, 
            {1,1}
        }, 
        {
            {1}, 
            {1}, 
            {1}, 
            {1}
        },
        {
            {0,0,1},
            {1,1,1}
        }
    };

我收到此错误: “数组初始值设定项只能在变量或字段初始值设定项中使用。请尝试使用新的表达式。”

我能做到这一点......

public class Shape
{
    public byte[][,] Shapes;

    public Shape()
    {
        Shapes = new byte[3][,];

        Shapes[0] = new byte[2, 2];
        Shapes[0][0, 0] = 1;
        Shapes[0][0, 1] = 1;
        Shapes[0][1, 0] = 1;
        Shapes[0][1, 1] = 1;

        Shapes[1] = new byte[1, 4];
        Shapes[1][0, 0] = 1;
        Shapes[1][0, 1] = 1;
        Shapes[1][0, 2] = 1;
        Shapes[1][0, 3] = 1;
    }
}

但这使我很难在程序中添加更多形状。

我的初始化程序错了吗?如果我不允许这样做,那么设置它的最简单方法是什么?

2 个答案:

答案 0 :(得分:9)

这对我有用:

  public byte[][,] Shapes = new byte[3][,]
    {
        new byte[,] { {1,1}, {1,1} },
        new byte[,] { {1}, {2}, {3}, {4} },
        new byte[,] { {0,0,1}, {1,1,1} }
    };

答案 1 :(得分:6)

数组初始值设定项语法({ ... })只能用于初始化字段或变量 要在外部数组中创建数组,您需要使用常规数组创建语法。

在内部new []之前添加{ ... }以创建隐式类型数组。

由于您正在处理byte和多维数组,因此您可能需要通过编写new byte[,] { ... }来明确指定某些类型。