使用字符串.分割,然后分配分割值给一个类-获得NullReferenceExceptions

本文关键字:分割 一个 NullReferenceExceptions 获得 字符串 然后 分配 | 更新日期: 2023-09-27 18:17:22

我正在制作一款游戏,我试图让我的游戏具有可修改性,所以我让游戏从文本文件中逐行读取可能的建筑及其属性列表,然后相应地拆分值。一切似乎都工作得很好,我甚至在游戏的另一部分使用了一段非常相似的代码,它工作得很好,但是当我试图在这里使用它时,它给了我这个异常。

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"的临时数组中填充数组"buildings"

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

这就是'buildings'数组的实例化方式。

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;
    }
}

请帮助我得到这个解决方案的工作,因为它是英里比我以前使用的好。

使用字符串.分割,然后分配分割值给一个类-获得NullReferenceExceptions

仅仅创建数组是不够的

Building[] parsedBuildings = new Building[500];

你也应该初始化它。例如:

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