如何访问List中的Class中的变量



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

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

这是我填充要序列化的List的代码,但每当我运行这段代码时,所有的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中的变量名,但我似乎找不到什么。任何帮助都将不胜感激,谢谢。

简单到:

library.books[0].name

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

    Book book1 = new Book();
    book1.name = "Hobbit";
    library.books.Add(book1);
    Book book2 = new Book()
    book2.name = "Xenocide";
    library.books.Add(book2);

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

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

Book book = new Book();

然后将book的名称字段分配给"霍比特人":

book.name = "Hobbit";

然后将book添加到Library.books列表字段:

library.book.Add(book);

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

book.name = "Xenocide";

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

您需要在任何时候创建一个不同的Book来创建一个新的Book。这不是可选的,这是任何面向对象语言的要求。