初始化自定义类的数组时遇到问题

时间:2017-06-21 19:45:15

标签: c# arrays unity3d

以下是代码:

public class RhombMap
{
    private Vector3 size;
    private Rhomb[][][] map;

    public RhombMap( int sizeX, int sizeY, int sizeZ )
    {
        size = new Vector3 (sizeX, sizeY, sizeZ);
        Rhomb[][][] map = new Rhomb[sizeX] [sizeY] [sizeZ];
    }
}

这令我烦恼地给了我错误:

Assets/Scripts/MapController.cs(186,46): error CS0021: Cannot apply indexing 
with [] to an expression of type `Rhomb'

我没有尝试将其编入索引,我正在尝试使用与Microsoft's own tutorial完全相同的语法初始化的数组

有人能发现什么是希望是一个明显的错误吗?

2 个答案:

答案 0 :(得分:2)

3d 数组之间存在差异,您可以一次初始化:

  Rhomb[,,] map = new Rhomb[sizeX, sizeY, sizeZ];

锯齿状数组(数组数组的数组),您必须在其中创建每个内部数组:

  Rhomb[][][] map = Enumerable
    .Range(0, SizeX)
    .Select(x => Enumerable
       .Range(0, SizeY)
       .Select(y => new Rhomb[SizeZ])
       .ToArray())
    .ToArray(); 

请注意,您已在<{1}}构造函数中重新声明 map作为本地变量

编辑: 2d 数组之间的差异(让我不要将 3d )和锯齿状之间的差异说明:< / p>

RhombMap

答案 1 :(得分:-1)

private Rhomb[][][] map;
...
Rhomb[][][] map = ...

您已声明了一个名称相同的新变量。

此外,由于您已声明了数组数组,因此无法单行创建新实例。您可以使用Dmitry的解决方案之一,也可以这样做:

map = new Rhomb[sizeX][][];
for(int x = 0; x < sizeX; x++) {
    map[x] = new Rhomb[sizeY][];
    for(int y = 0; y < sizeY; y++) {
        map[x][y] = new Rhomb[sizeZ];
    }
}

我仍然认为Dmitry将你的数组声明为Rhomb[,,]的解决方案是最好的。