使用字符串.分割,然后分配分割值给一个类-获得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;
}
}
请帮助我得到这个解决方案的工作,因为它是英里比我以前使用的好。
仅仅创建数组是不够的
Building[] parsedBuildings = new Building[500];
你也应该初始化它。例如:
for(int k = 0; k < parsedBuildings.Length; k++)
parsedBuildings[k] = new Building();