我是编程新手,在创建一个具有另一个类的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; }
}
谢谢,我感谢所有的帮助!
答案 0 :(得分:5)
创建BookList
时,您实际上尚未初始化作为其成员的列表。您可以通过将初始化更改为:
BookList myBookList = new BookList() {bookList = new List<Book>()};
或者通过编写初始化列表的BookList
类的构造函数;看起来像这样:
class BookList
{
public List<Book> bookList { get; set; }
public BookList(){ //New constructor
bookList = new List<Book>();
}
}
您收到此错误的原因是,虽然您已创建BookList实例,但实际上并未确保BookList
内部booklist
属性已初始化。如果您尝试这样做就好了:
List<string> newList;
newList.Add("foo");
那是行不通的,因为你只是声明了newList
,而没有初始化它。
答案 1 :(得分:0)
您需要初始化Boolist.bookList
中的default ctor
:
class BookList
{
public BookList() { bookList = new List<Book>; } // <<<<
public List<Book> bookList { get; set; }
}
答案 2 :(得分:0)
您的public List<Book> bookList { get; set; }
课程中的问题是BookList
;你从来没有初始化它。例如,您可以在构造函数中执行此操作:
class BookList
{
public List<Book> bookList { get; set; }
public BookList
{
bookList = new List<Book>();
}
}
请注意:属性应始终以Pascal大小写命名,即所有大写字母:BookList
而不是bookList
。
另外,由于用BookList
的另一个实例替换你的List<Book>
并没有用,我建议你在setter上设置访问修饰符private
因此它只能初始化一次,即在构造函数中:
public List<Book> bookList { get; private set; } // notice the "private" set