tha*_*nby 1 c# class list object nullreferenceexception
我定义了一些自定义类,包括其他类的列表,如下所示:
public class Unit
{
public string Name { get; set; }
public List<Group> Contains { get; set; }
}
public class Group
{
public string Name { get; set; }
public Type Type { get; set; }
public int Number { get; set; }
}
public static Type basic_1 = new Type() { Name = "basic_1", Number = 1, Cost = 13 };
Run Code Online (Sandbox Code Playgroud)
基本思想是你有一个包含一个组列表的单元,每个组都有不同的类型.该类型包含特定属性,而包含它们的类本质上是组织的.
然后我尝试开始构建这些类,如下所示:
Unit unit1 = new Unit() { Name = "Unit 1" };
Group group1 = new Group() { Name = "Group 1", Number = 10, Type = basic_1 };
unit1.Contains.Add(group1);
Run Code Online (Sandbox Code Playgroud)
但在这里我收到错误(在Add方法上)"对象引用没有设置为对象的实例." 查看调试器中的本地,我可以看到Unit,Group并且Type都是成功创建的并且group1包含Type它应该具有的所有值,但是unit1.Contains为null.
我究竟做错了什么?仅供参考我之前从未做过这样的事情,所以我甚至都不知道它是否可能,但在此之前似乎工作正常.
mas*_*son 13
您List<Group> Contains永远不会被初始化,因此当您尝试访问它时,您将获得空引用异常.基本上所有空引用异常都是相同的,您尝试使用null的对象.
在这种情况下,让我们添加一个默认构造函数来为我们初始化列表.
public class Unit
{
public string Name { get; set; }
public List<Group> Contains { get; set; }
public Unit()
{
Contains = new List<Group>();
}
}
Run Code Online (Sandbox Code Playgroud)
顺便说一下,Contains列表是一个可怕的名字.Contains通常是一个函数调用,因为它是一个动词.通常最好使用名词作为集合,例如Groups.
public class Unit
{
public string Name { get; set; }
public List<Group> Groups { get; set; }
public Unit()
{
Groups = new List<Group>();
}
}
Run Code Online (Sandbox Code Playgroud)