为什么我不能将对象添加到我的列表<>?

时间:2014-01-28 00:47:06

标签: c# nullreferenceexception

我有一个类clsPerson,看起来像这样:

public class clsPerson
{
    public string FirstName;
    public string LastName;
    public string Gender;
    public List<Book> Books;
}

我有另一个类,Book,看起来像这样:

public class Book
{
    public string Title;
    public string Author;
    public string Genre;        

    public Book(string title, string author, string genre)
    {            
        this.Title = title;
        this.Author = author;
        this.Genre = genre;
    }
}

我编写了一个程序来测试将对象序列化为XML。到目前为止,这就是我所拥有的:

class Program
{
    static void Main(string[] args)
    {
        var p = new clsPerson();
        p.FirstName = "Kevin";            
        p.LastName = "Jennings";
        p.Gender = "Male";

        var book1 = new Book("Neuromancer", "William Gibson", "Science Fiction");
        var book2 = new Book("The Hobbit", "J.R.R. Tolkien", "Fantasy");
        var book3 = new Book("Rendezvous with Rama", "Arthur C. Clarke", "Science Fiction");

        p.Books.Add(book1);
        p.Books.Add(book2);
        p.Books.Add(book3);

        var x = new XmlSerializer(p.GetType());

        x.Serialize(Console.Out, p);
        Console.WriteLine();
        Console.ReadKey();
    }
}

我在VS2013中遇到错误,在p.Books.Add(book1);行上显示“NullReferenceException未处理”。

显然,我做错了什么。我认为我可以制作一些图书,然后将它们添加到名为clsPerson的{​​{1}}对象List中。在我尝试将Books对象添加到book1列表之前刚刚实例化Books对象时,我无法弄清楚为什么错误会出现'NullReferenceException'。有人可以给我一个指针或一些建议吗?

3 个答案:

答案 0 :(得分:8)

您没有在Person班级

中实例化您的图书馆藏品

在你的Person构造函数中:

public Person()
{
  this.Books = new List<Book>();
}

答案 1 :(得分:5)

您应首先初始化您的列表:

if(p.Books == null)
   p.Books = new List<Book>();

更适合在clsPerson类构造函数中执行此操作。

答案 2 :(得分:3)

class创建对象时,您应该真正初始化对象。

试试这个:

public class clsPerson
{
    public string FirstName;
    public string LastName;
    public string Gender;
    public List<Book> Books = new List<Book>();
}