尝试将对象添加到类中的列表时,"对象引用未设置为对象的实例"错误

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)