使用String.Split,然后将拆分值分配给类 - 获取NullReferenceExceptions

时间:2014-08-08 20:18:57

标签: c# arrays split nullreferenceexception

我正在制作一个游戏,我正在尝试让我的游戏可以修改,所以我让游戏从文本文件中逐行读取可能的建筑物及其统计数据列表,然后相应地拆分值。一切似乎工作得很好,我甚至在游戏的另一部分使用了非常相似的代码片段并且工作正常,但是当我尝试在这里使用它时,它给了我这个例外。

public static void parseBuildings()
{
    Building[] parsedBuildings = new Building[500];

    string[] buildingList = System.IO.File.ReadAllLines(AppDomain.CurrentDomain.BaseDirectory + @"\data\buildings.turd");

    int i = 0;
    foreach (string line in buildingList)
    {
        string[] parts = line.Split(',');

        //MessageBox.Show(parts[0] + parts[1] + parts[2] + parts[3] + parts[4] + parts[5]);

        //File format - name,description,unused(price),baseprice,count(unused),hps

        parsedBuildings[i].name = parts[0];
        parsedBuildings[i].description = parts[1];
        //parsedBuildings[i].price = int.Parse(parts[2]);
        parsedBuildings[i].baseprice = int.Parse(parts[3]);
        //parsedBuildings[i].count = int.Parse(parts[4]);
        parsedBuildings[i].hps = int.Parse(parts[5]);
        i++;
    }

    Array.Resize(ref parsedBuildings, buildingList.Length);

    buildings = parsedBuildings;
}

这使得游戏填满阵列“建筑物”。来自名为' parsedBuildings'

的临时数组

有趣的是NullReferenceException发生在parsedBuildings[i].description = parts[1];行,注释的消息框工作正常。

这就是'建筑物'数组被实例化。

public static Building[] buildings = {new Building("Loading", "Loading", 1,1,0,0)};

这就是Building类的样子

public class Building
{
    public string name;
    public string description;
    public int price;
    public int baseprice;
    public int count;
    public int hps;

    public Building(string nam, string desc, int pri, int bpri, int cnt, int hp)
    {
        name = nam;
        description = desc;
        price = pri;
        baseprice = bpri;
        count = cnt;
        hps = hp;
    }
}

请帮我解决这个问题,因为它比以前使用的要好几英里。

1 个答案:

答案 0 :(得分:3)

仅创建数组

是不够的
Building[] parsedBuildings = new Building[500];

您还应该初始化它。例如:

for(int k = 0; k < parsedBuildings.Length; k++)
    parsedBuildings[k] = new Building();