【问题标题】:How do I access a variable that is inside a Class that is inside a List?如何访问列表中的类中的变量?
【发布时间】:2012-07-29 19:22:14
【问题描述】:

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

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

public class Book{
    public string name;
}

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

【问题讨论】:

    标签: c# class arraylist


    【解决方案1】:

    就这么简单:

    library.books[0].name
    

    【讨论】:

    • 这正是我一直在寻找的,我不知道为什么我愚蠢地忽略了它。我想我只是盯着这个问题太久了,非常感谢。
    【解决方案2】:

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

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

    【讨论】:

    • 我知道我使用的是同一本书,因为最终我想重新编写此代码以使其尽可能灵活。我不想为每个列表中的每本书创建一个新变量,并且我没想到更新变量时列表会更新(这对我来说很愚蠢)。
    • 您可以根据需要重复使用相同的变量 name,但您仍然必须为要添加的每一本书调用 new Book()。请记住,该列表存储的是对书籍的引用,而不是它们的副本。
    【解决方案3】:

    您偶然发现了 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 的这个特定instance 传递给任何其他类或方法,并且您始终使用相同的book。您在此过程中所做的大多数更改都会影响到原书(有一些例外,但并不多)

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-11-29
      • 1970-01-01
      • 2018-01-11
      • 2012-11-04
      • 2013-12-15
      • 2018-08-15
      • 2012-04-09
      相关资源
      最近更新 更多