2013-02-28 67 views
1

我有一個GameObject,我們稱之爲GM。附加到它是一個腳本,是爲了一個遊戲的主要邏輯控制器。使用初始值設定項創建對象數組似乎失敗

在該腳本,什麼地方,我有:

private dbEquipment equipment_database = new dbEquipment(); 

從dbEquipment.cs相關片段:

public class dbEquipment { 
    private int total_items = 13; 
    private clEquipment[] _master_equipment_list; 

    public dbEquipment() { 
     _master_equipment_list = new clEquipment[total_items]; 
     _master_equipment_list[0] = new clEquipment { 
      ... //large amount of object initializing here 
     }; 
     ... //etc, for all 13 items 
    } 
} 

當我運行團結,我得到:

NullReferenceException: Object reference not set to an instance of an object 

指向該行:

_master_equipment_list[0] = new clEquipment { ... 

我試圖通過陣列上運行,每clEquipment對象初始化爲空clEquipment()第一名:

for(int x = 0; x < total_items; x++) { _master_equipment_list[x] = new clEquipment(); } 

只是要完全確保陣列竟涌起,但我得到了相同的結果。

我也試過把它改爲List<clEquipment>,並且適當地改變一切 - 沒有骰子。

任何想法?

+0

幾乎所有'NullReferenceException'的情況都是一樣的。請參閱「[什麼是.NET中的NullReferenceException?](http://stackoverflow.com/questions/4660142/what-is-a-nullreferenceexception-in-net)」的一些提示。 – 2013-02-28 02:43:54

+0

感謝您的輸入!我知道'NullReferenceException'是什麼。在這種情況下,我只是被難住了,因爲這是那些「過於簡單而不能失敗」的案例,所以我認爲也許有人可能知道一些特定於Unity的怪癖。 – user462879 2013-02-28 02:46:24

+1

在這種情況下,你應該知道如何調試它並找出什麼是空的。任何人在[so]給你答案之前,你都可能會找到答案。 – 2013-02-28 02:48:57

回答

4

我的猜測是,當您創建新的clEquipment時,您可能在//large amount of object initializing here部分包含空引用。

_master_equipment_list[0] = new clEquipment { 
    ... //check for nulls here 
}; 
+0

我誤解了對象初始值設定項的處理方式 - 罪魁禍首確實在那裏;在此之前,我認爲它會指出特定行的錯誤,而不會意識到無論我的IDE中整個初始化程序有多漂亮,實際上它都只有一行。謝謝! – user462879 2013-02-28 03:32:44

0

您可能想要發佈clEquipment類的代碼。你說你嘗試初始化每個對象......你是否在分界線之前這麼做?如果沒有破裂,那是一個好兆頭。

此外,難以從您的代碼中知道,但是您是否需要在初始化時斷開「()」?只是一個想法

_master_equipment_list[0] = new clEquipment() { 
+1

執行對象初始化表達式時不需要括號。 – juharr 2013-02-28 02:51:27

+0

閱讀@Jace後的另一個想法 - 確保您的構造函數初始化「//在這裏初始化大量對象」時需要的構造函數構造函數在初始化之前運行! – 7200rpm 2013-02-28 02:51:58

+0

構造函數不需要初始化任何對象初始化工作。這就是它的重點。更有可能的是,null值是他用來設置其中一個屬性的東西。 – juharr 2013-02-28 02:54:34

相關問題