我有一个类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'。有人可以给我一个指针或一些建议吗?
答案 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>();
}