2012-01-22 101 views
1

我敢肯定,我已经初始化的一切,但它仍然抛出错误在初始化数组变量

“对象引用不设置到对象的实例。”

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#不允许动态创建数组?

回答

4

我假设Cell是一个类(引用类型)。这意味着阵列的元素是参考文献。你正在创建一个数组,但所有的元素在默认情况下都是空的。你可能想:

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; 
    } 
} 
+0

中当然,就像我可以输入Skeet一样。 ;) –

+0

哦,看他回答得有多快! –