如何访问List内部的类中的变量?

时间:2012-07-31 22:39:22

标签: c# class arraylist

我正在努力学习序列化XML文件,并且我在访问List内部的一个变量时遇到了麻烦。这是声明代码:

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

public class Book{
    public string name;
}

下面是我填充List我将要序列化的代码,但每当我运行此代码时,所有library.books.name总是最终等于我保存的最后一本书,在此案件“杀虫剂”。

    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中访问变量名,但我似乎无法找到某些东西。任何帮助将不胜感激,谢谢。

3 个答案:

答案 0 :(得分:4)

简单如下:

library.books[0].name

答案 1 :(得分:4)

您还遇到了一个问题,即您将SAME书籍两次添加到库中,只是在其中更改其名称。您需要创建两个单独的图书对象,并将每个图书对象添加到列表中。

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

答案 2 :(得分:0)

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

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

Book book = new Book();

然后,您将book的名称字段分配给“Hobbit”:

book.name = "Hobbit";

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

library.book.Add(book);

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

book.name = "Xenocide";

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

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