使用初始化程序创建对象数组似乎失败了

时间:2013-02-28 02:33:15

标签: c# object unity3d object-initializer

我有一个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
    }
}

当我运行Unity时,我得到:

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>,并适当更改所有内容 - 没有骰子。

有什么想法吗?

2 个答案:

答案 0 :(得分:4)

我的猜测是,当您创建新的//large amount of object initializing here时,您可能会在clEquipment部分中包含空引用。

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

答案 1 :(得分:0)

您可能希望发布clEquipment类的代码。你说你试过初始化每个对象......你是否在断线前做到了?如果它没有破裂,这是一个好兆头。

另外,很难从你的代码中分辨出来,但是在初始化中你需要一个“()”吗?只是一个想法

_master_equipment_list[0] = new clEquipment () {