2016-05-05 59 views
2

當我想將項目添加到鋸齒陣列中的元素時,我得到NullReferenceException。用for循環初始化鋸齒陣列<int>由for循環

public List<int>[][] Map; 

void Start() 
{ 
    Map = new List<int>[60][]; 
    for(byte x = 0; x < 60 ; x++) 
    { 
     Map[x] = new List<int>[60]; 
     // initialization of rows 
    } 

    Map [23] [34].Add (21); 
} 
+0

在開始向列表添加項目之前,您需要實例化您的列表。 I.E. '地圖[23] [34] =新列表()' –

回答

2

你有一個鋸齒狀陣列,它的每個元素都是List<int>。您初始化數組,但不是元素。

因此,當您在未初始化的元素上調用Add這是一個List<int>你會得到異常。

Map = new List<int>[60][]; 
for (int x = 0; x < 60; x++) 
{ 
    Map[x] = new List<int>[60]; 

    for (int y = 0; y < 60; y++) 
    { 
     Map[x][y] = new List<int>(); // initializing elements 
    } 
    // initialization of rows 
} 

Map[23][34].Add(21); 
+0

嗯,謝謝你的回答。有一個問題需要澄清: 例如,當我編寫int數組時,其中的ints會立即初始化,但是在List數組中,列表不是? – Jujek

+0

這是因爲int是一個值類型,但是'List '是一個引用類型。當值類型被初始化時,他們得到一個值。例如,int變爲0,bool變爲false,但引用類型默認值爲null。所以當你試圖訪問它們時,你會得到NullReferenceException。 – dotctor

+1

啊,該死的,非常感謝。我一直在閱讀關於價值/參考類型的東西,現在這些信息終於開始連接。 – Jujek