以下是代码:
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完全相同的语法初始化的数组。
有人能发现什么是希望是一个明显的错误吗?
答案 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[,,]
的解决方案是最好的。