我很确定我已经初始化了所有内容,但它仍然会抛出
“对象引用未设置为对象的实例。”
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#不允许动态数组创建?
答案 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;
}
}