这段代码给了我这个错误:“不能在这一行隐式地将类型ArrayList []转换为ArrayList [] []”:m_grid[gridIndexX] = new ArrayList[Height];
但是我怎么能用另一种方式呢?当m_grid数组是一个二维数组时,它可以工作,但作为一个三维数组,它不起作用。谢谢你的帮助。
private ArrayList[][][] m_grid;
private void initialize() {
Width = 5;
Height = 5;
Depth = 5;
m_grid = new ArrayList[Width][][];
}
public void Refresh(ref ArrayList particles) {
m_grid = null;
m_grid = new ArrayList[Width][][];
if (particles != null) {
for (int i = 0; i < particles.Count; i++) {
FluidParticle p = (FluidParticle) particles[i];
int gridIndexX = GetGridIndexX(ref p);
int gridIndexY = GetGridIndexY(ref p);
int gridIndexZ = GetGridIndexZ(ref p);
// Add particle to list
if (m_grid[gridIndexX] == null) {
m_grid[gridIndexX] = new ArrayList[Height];
}
if (m_grid[gridIndexX][gridIndexY][gridIndexZ] == null) {
m_grid[gridIndexX][gridIndexY][gridIndexZ] = new ArrayList();
}
m_grid[gridIndexX][gridIndexY][gridIndexZ].Add(i);
}
}
}
答案 0 :(得分:1)
您需要添加另一个索引器。您已将m_grid
初始化为三维数组。因此m_grid
中的任何第一级元素都是二维数组。而你正试图将其中一个元素设置为一维数组:
m_grid[gridIndexX] = new ArrayList[Height];
在上面的代码中,m_grid[gridIndexX]
的类型为ArrayList[][]
,因此您的类型不匹配。
您需要将其设置为正确的类型:
m_grid[gridIndexX] = new ArrayList[Height][];
我不知道这是否会解决你的问题,因为很难分辨出这段代码实际上应该做什么。 (实际上,如果你不确定你的代码的哪些部分是数组的维度,我不确定你是否知道这个代码应该做什么......)
答案 1 :(得分:0)
您错过了[]
。这条线
m_grid[gridIndexX] = new ArrayList[Height];
应该是
m_grid[gridIndexX] = new ArrayList[Height][];
代替。
答案 2 :(得分:0)
您需要使用大小初始化它:
ArrayList[][][] m_grid;
m_grid = new ArrayList[100][][];
m_grid[0] = new ArrayList[100][];
m_grid[0][0] = new ArrayList[100];
这意味着您的代码示例如下所示:
public void Refresh(ref ArrayList particles)
{
m_grid = null;
m_grid = new ArrayList[Width][][];
if (particles != null)
{
for (int i = 0; i < particles.Count; i++)
{
FluidParticle p = (FluidParticle)particles[i];
int gridIndexX = GetGridIndexX(ref p);
int gridIndexY = GetGridIndexY(ref p);
int gridIndexZ = GetGridIndexZ(ref p);
// Add particle to list
if (m_grid[gridIndexX] == null)
{
m_grid[gridIndexX] = new ArrayList[Height][];
}
if (m_grid[gridIndexX][gridIndexY][gridIndexZ] == null)
{
m_grid[gridIndexX][gridIndexY][gridIndexZ] = new ArrayList();
}
m_grid[gridIndexX][gridIndexY][gridIndexZ].Add(i);
}
}
}
尽管如此,我强烈建议你离开ArrayList
,如果可以的话。正如其他评论者所说,使用通用的强类型集合,例如List<T>
。