尽管创建了一个新对象,但对象引用未设置为object的实例

时间:2013-11-04 20:47:17

标签: c# object reference

我目前正在制作一个基本的绘图程序。其中一个要求是能够保存绘制对象列表并将其重新加载。到目前为止,我编写了一个保存函数,将列表中的所有项目导出为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(工具);

但是,我确实在开头实例化了这个工具,不是吗?可能导致此错误的原因是什么?一些谷歌搜索告诉我这可能是因为我忘了分配一个房产,但据我所知,我已经把它们全部覆盖了......

非常感谢帮助。

3 个答案:

答案 0 :(得分:9)

错误是由于ss.listItems未实例化。

在没有看到更多代码的情况下,很难知道哪个是null,但我猜你正在为s创建一个新对象,其中包含属性/字段listItems,但你不是将列表分配给listItems

答案 1 :(得分:2)

问题是您没有实例化listItemss。没有足够的信息告诉你如何实例化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);