2012-01-22 116 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

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