2013-12-13 2 views
0

То, что я пытаюсь сделать, это определить мой собственный тип, который содержит 2 int s для использования в двумерном массиве. Приложение для этого использует индексы массива в виде координат x, y для объектов в двухмерном пространстве для отображения. Таким образом, объект с данными, хранящимися в array[13,5], будет отображаться при x = 13, y = 5, и свойства этого объекта могут быть получены, например, с помощью array[13,5].property1. Типа я определил предельно прост:NullReferenceException при попытке использовать мой первый пользовательский тип

chunkBlocks.cs: 
public class chunkBlocks { 
    public int blockType; 
    public int isLoaded; 
} 

тогда я инициализировать массив:

chunkBlocks[,] _bData = new chunkBlocks[17, 17]; 

Это все компилируется/запускается без ошибок. NRE бросается, когда я пытаюсь присвоить значение одному из свойств этого типа. Для отладки, у меня есть код, написанный как:

_bData[i, n].blockType = 5; 

и ЯРД выбрасывается именно на .blockType части. Я попытался изменить тип инициализации с 0 значениями для обоих int с но безрезультатно:

public class chunkBlocks { 
    public int blockType = 0; 
    public int isLoaded = 0; 
} 

Я Googled вокруг и искал SO, и я не был в состоянии оказаться что угодно. Я уверен, что это относительно простой вопрос, но я недостаточно опытен, чтобы его можно было точно определить.

Спасибо!

ответ

4

Вы должны инициализировать каждый экземпляр массива:

_bData[i, n] = new chunkBlocks(); 

Теперь присвоить ей значение:

_bData[i, n].blockType = 5; 

Вы должны будете инициализировать каждый экземпляр, вы просто объявили их в массив.

0

Я думаю, что вы должны сделать, это:

for(int i = 0;i<17;i++) 
{ 
    for (int j = 0; j < 17; j++) 
    { 
     _bData[i, j] = new chunkBlocks(); 
    } 
} 
Смежные вопросы