2013-02-28 66 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

相关问题