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

Ой, как быстро он ответил! –

Смежные вопросы