类列表的空引用exception

我是编程新手,在创建一个具有另一个类的list属性的类然后在main中访问它时遇到了问题。 我尝试将项添加到列表后得到exception“对象引用未设置为对象的实例”我在运行时遇到此错误。 我知道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 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; } } 

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

创建BookList ,实际上并未初始化作为其成员的列表。 您可以通过将初始化更改为:

 BookList myBookList = new BookList() {bookList = new List()}; 

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

 class BookList { public List bookList { get; set; } public BookList(){ //New constructor bookList = new List(); } } 

您收到此错误的原因是,当您创建BookList实例时,您实际上并未确保BookList的内部booklist属性已初始化。 就像你试图这样做:

 List newList; newList.Add("foo"); 

这不起作用,因为你只声明了newList ,而没有初始化它。

您需要在default ctor初始化Boolist.bookList

 class BookList { public BookList() { bookList = new List; } // <<<< public List bookList { get; set; } } 

你的问题是public List bookList { get; set; } public List bookList { get; set; } 在你的BookList类中; 你从来没有初始化它。 例如,您可以在构造函数中执行此操作:

 class BookList { public List bookList { get; set; } public BookList { bookList = new List(); } } 

请注意:属性应始终使用Pascal大小写命名,即所有字母大写: BookList不是bookList

另外,由于将BookList 替换为另一个List实例并没有用,我建议你将setter上的访问修饰符设置为private这样它只能初始化一次,即在构造函数中:

 public List bookList { get; private set; } // notice the "private" set