我目前正在制作一个基本的绘图程序。其中一个要求是能够保存绘制对象列表并将其重新加载。到目前为止,我编写了一个保存函数,将列表中的所有项目导出为XML格式,我目前正在处理装载部分。
每当程序遇到“< RechthoekTool>”时(荷兰语为RectangleTool),它执行以下代码:
//Create new tool.
RechthoekTool tool = new RechthoekTool();
//Turn <Startpoint> and <Endpoint> into actual points
var sp = Regex.Replace(xn["Startpunt"].InnerText, @"[\{\}a-zA-Z=]", "").Split(',');
tool.startpunt = new Point(int.Parse(sp[0]), int.Parse(sp[1]));
var ep = Regex.Replace(xn["Eindpunt"].InnerText, @"[\{\}a-zA-Z=]", "").Split(',');
tool.eindpunt = new Point(int.Parse(ep[0]), int.Parse(ep[1]));
//Set colour and width of brush
string kleur = xn["Dikte"].InnerText;
kleur.Replace(@"Color [", "");
kleur.Replace(@"]", "");
Color c = Color.FromName(kleur);
tool.kwastkleur = c;
tool.kwast = new SolidBrush(c);
tool.dikte = int.Parse(xn["Dikte"].InnerText);
//Add to list
s.listItems.Add(tool);
每当我运行程序时,我得到'NullReferenceException未处理'错误(“对象引用未设置为对象的实例。”)
但是,我确实在开头实例化了这个工具,不是吗?可能导致此错误的原因是什么?一些谷歌搜索告诉我这可能是因为我忘了分配一个房产,但据我所知,我已经把它们全部覆盖了......s.listItems.Add(工具);
非常感谢帮助。
答案 0 :(得分:9)
错误是由于s
或s.listItems
未实例化。
在没有看到更多代码的情况下,很难知道哪个是null,但我猜你正在为s
创建一个新对象,其中包含属性/字段listItems
,但你不是将列表分配给listItems
。
答案 1 :(得分:2)
问题是您没有实例化listItems
或s
。没有足够的信息告诉你如何实例化s
,但你可以像这样做另一个:
s.listItems = new List<RechthoekTool>();
答案 2 :(得分:1)
如果您不使用instantiate关键字new内容;它根本不会起作用。
使用您的代码,试试这个:
//Create new tool.
RechthoekTool tool = new RechthoekTool();
//Turn <Startpoint> and <Endpoint> into actual points
var sp = Regex.Replace(xn["Startpunt"].InnerText, @"[\{\}a-zA-Z=]", "").Split(',');
tool.startpunt = new Point(int.Parse(sp[0]), int.Parse(sp[1]));
var ep = Regex.Replace(xn["Eindpunt"].InnerText, @"[\{\}a-zA-Z=]", "").Split(',');
tool.eindpunt = new Point(int.Parse(ep[0]), int.Parse(ep[1]));
//Set colour and width of brush
string kleur = xn["Dikte"].InnerText;
kleur.Replace(@"Color [", "");
kleur.Replace(@"]", "");
Color c = Color.FromName(kleur);
tool.kwastkleur = c;
tool.kwast = new SolidBrush(c);
tool.dikte = int.Parse(xn["Dikte"].InnerText);
List<RechthoekTool> s = new List<RechthoekTool>(); // You can now use your list.
//Add to list
s.listItems.Add(tool);