0

这段代码在这一行给了我这个错误:“无法将类型 ArrayList[] 隐式转换为 ArrayList[][]”:m_grid[gridIndexX] = new ArrayList[Height];但是我该如何以另一种方式做到这一点?当 m_grid 数组是二维数组时,它可以工作,但作为 3 维数组,它不起作用。谢谢您的帮助。

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);
            }
        }
    }
4

3 回答 3

1

您需要添加另一个索引器。您已初始化m_grid为 3 维数组。因此,其中的任何第一级元素m_grid都是二维数组。您正在尝试将其中一个元素设置为一维数组:

m_grid[gridIndexX] = new ArrayList[Height];

在上面的代码中,m_grid[gridIndexX]是 type ArrayList[][],所以你有一个类型不匹配。

您需要将其设置为正确的类型:

m_grid[gridIndexX] = new ArrayList[Height][];

我不知道仅此一项是否能解决您的问题,因为很难辨别这段代码实际上应该做什么。(事实上​​,如果你不确定你的代码的哪些部分是数组的什么维度,我不确定你是否知道这段代码应该做什么......)

于 2012-07-05T11:26:59.453 回答
0

您缺少一个[]. 线

m_grid[gridIndexX] = new ArrayList[Height];

应该

m_grid[gridIndexX] = new ArrayList[Height][];

反而。

于 2012-07-05T11:26:38.427 回答
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>.

于 2012-07-05T11:27:26.380 回答