类列表的空引用异常

Cal*_*iez 1 c# visual-studio-2015

我是编程新手,在创建一个具有另一个类的list属性的类然后在main中访问它时遇到了问题.尝试将项添加到列表后,我得到异常"对象引用未设置为对象的实例"我在运行时遇到此错误.我知道List <>引用是null但我试图理解为什么它是null以及如何绕过它.如果我只是在main中创建List,我的代码将正常运行,但我希望将来将它作为一个类.就像我说的那样,我是编程OOP的新手,并试图获得有关为什么会发生这种情况的一些信息.如果这是一个重复的问题,我道歉.我的代码段如下:

static void Main(string[] args)
    {
        BookList myBookList = new BookList();

        myBookList.bookList.Add(new Book("The Giver", "Lois Lowry", "Houghton Mifflin"));
        myBookList.bookList.Add(new Book("Telling Lies", "Paul Ekman", "Norton & Company"));
    }


class BookList
{
    public List<Book> bookList { get; set; }
}

class Book
{
    public Book(string title, string author, string publisher)
    {
        Title = title;
        Author = author;
        Publisher = publisher;
    }

    public string Title { get; set; }
    public string Author { get; set; }
    public string Publisher { get; set; }        
}
Run Code Online (Sandbox Code Playgroud)

谢谢,我感谢所有的帮助!

Chr*_* H. 5

在创建时BookList,您实际上没有初始化作为其成员的列表.您可以通过将初始化更改为:

BookList myBookList = new BookList() {bookList = new List<Book>()};
Run Code Online (Sandbox Code Playgroud)

或者通过为BookList初始化列表的类编写构造函数; 看起来像这样:

class BookList
{
    public List<Book> bookList { get; set; }

    public BookList(){ //New constructor
        bookList = new List<Book>();
    }
}
Run Code Online (Sandbox Code Playgroud)

你得到这个错误的原因是,当你创建了一个BookList实例时,你实际上并没有确保初始化了它BookList的内部booklist属性.就像你试图这样做:

List<string> newList;
newList.Add("foo");
Run Code Online (Sandbox Code Playgroud)

那是行不通的,因为你只声明了newList它,而不是初始化它.