初始化数组变量时出错

时间:2012-01-22 13:58:36

标签: c# multidimensional-array

我很确定我已经初始化了所有内容,但它仍然会抛出

“对象引用未设置为对象的实例。”

    Cell[,] cell;
    bool[,] UpdateCell;

    int AreaSizeX;
    int AreaSizeY;
    int MaxAge;

    public void Reset(int areaSizeX, int areaSizeY, int maxAge)
    {
        AreaSizeX = areaSizeX;
        AreaSizeY = areaSizeY;
        MaxAge = maxAge;

        cell = new Cell[AreaSizeX, AreaSizeY];
        UpdateCell = new bool[AreaSizeX, AreaSizeY];

        for (int i = 0; i < areaSizeX; i++)
        {
            for (int j = 0; j < areaSizeY; j++)
            {
                cell[i, j].Alive = false; //throws exception here #########
                cell[i, j].Age = 0;

                UpdateCell[i, j] = false;
            }
        }
    }

此代码有什么问题? C#不允许动态数组创建?

1 个答案:

答案 0 :(得分:4)

我认为Cell是一个类(引用类型)。这意味着数组的元素是引用。您正在创建一个数组,但默认情况下所有元素都为null - 。你可能想要:

for (int i = 0; i < areaSizeX; i++)
{
    for (int j = 0; j < areaSizeY; j++)
    {
        cell[i, j] = new Cell();
        cell[i, j].Alive = false;
        cell[i, j].Age = 0;

        UpdateCell[i, j] = false;
    }
}

或者你可以给你的Cell班级一个接受年龄和活力的建设者:

for (int i = 0; i < areaSizeX; i++)
{
    for (int j = 0; j < areaSizeY; j++)
    {
        cell[i, j] = new Cell(false, 0);
        UpdateCell[i, j] = false;
    }
}

或者使用对象初始值设定项来设置属性:

for (int i = 0; i < areaSizeX; i++)
{
    for (int j = 0; j < areaSizeY; j++)
    {
        cell[i, j] = new Cell { Alive = false, Age = 0};
        UpdateCell[i, j] = false;
    }
}