1

我正在尝试学习序列化 XML 文件,但在访问 List 中的 Class 中的变量时遇到了障碍。这是声明代码:

public class Library{
    public string name;
    public List<Book> books;
}

public class Book{
    public string name;
}

这是我填充要序列化的列表的代码,但是每当我运行此代码时,所有的library.books.name最终总是等于我保存书的最后一件事,在本例中为“Xenocide”。

    public void MakeXML(){
        Library library = new Library();
        library.books = new List<Book>();       
        library.name = "Red";
        Book book = new Book();
        book.name = "Hobbit";
        library.books.Add(book);
        book.name = "Xenocide";
        library.books.Add(book);
    }

我想知道是否有一种方法可以访问 List 书籍中 Class Book 中的变量名,但我似乎找不到任何东西。任何帮助将不胜感激,谢谢。

4

3 回答 3

4

很简单:

library.books[0].name
于 2012-07-31T22:41:10.830 回答
4

您还遇到了一个问题,即您将同一本书添加到图书馆两次,并且只是在两者之间更改了它的名称。您需要创建两个单独的书籍对象并将每个对象添加到列表中。

    Book book1 = new Book();
    book1.name = "Hobbit";
    library.books.Add(book1);
    Book book2 = new Book()
    book2.name = "Xenocide";
    library.books.Add(book2);
于 2012-07-31T22:44:09.320 回答
0

您偶然发现了 OOP 的全部内容。正如 DGH 所说,您将同一本书添加到列表中两次,只是在两者之间更改名称。

您基本上是在创建一个Book名为的新对象book

Book book = new Book();

然后,您将 name 字段分配book给“Hobbit”:

book.name = "Hobbit";

然后,您添加book到您的Library.books列表字段:

library.book.Add(book);

然后,您将原书的名称字段更改为“Xenocide”并将其添加到列表中

book.name = "Xenocide";

上一行是我认为您忘记的内容。 book是单个对象。您可以将此特定实例传递Book给任何其他类或方法,并且始终使用相同的book. 您在此过程中所做的大多数更改总是会影响原书(有一些例外,但不多)

您需要随时创建一个新BookBook. 这不是可选的,这是任何面向对象语言的要求。

于 2012-07-31T23:34:11.527 回答