2012-07-31 48 views
1

我想学习序列化XML文件,并且遇到了访问列表中的类内的变量的障碍。以下是声明代码:如何访问列表中的类内的变量?

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); 
    } 

我想知道是否有接取变量名的类书里面的书籍列表里面的一种方式,但我似乎无法找到的东西。任何帮助将不胜感激,谢谢。

回答

4

简单:

library.books[0].name 
+0

这正是我一直在寻找的东西,我不知道为什么我会忽略它。我想我只是盯着这个问题太久了,非常感谢。 – 2012-07-31 23:33:37

4

你还要在那里你将同一本书图书馆两次,只是改变它的名字插图中的一个问题。您需要创建两个独立的书对象并将其添加到列表中。

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

我知道我使用的是同一本书,因为我最终希望重写此代码以尽可能灵活。我不想为每个列表中的每本书创建一个新变量,并且当我更新变量时(我的部分是愚蠢的),我不希望列表更新。 – 2012-07-31 23:31:40

+0

如果需要,您可以重复使用相同的变量*名称*,但是您仍然必须为要添加的每本书调用'new Book()'。请记住,该列表存储*参考书*,而不是它们的副本。 – DGH 2012-07-31 23:34:58

0

你已经偶然发现了OOP的全部内容。正如DGH所说的,你将同一本书加入列表两次,只是改变它们之间的名字。

你基本上是创建一个新的Book对象调用book

Book book = new Book(); 

然后,您分配的book为 “霍比特人” 的名称字段:

book.name = "Hobbit"; 

然后添加bookLibrary.books列表字段:

library.book.Add(book); 

然后你变化然后命名你的原书,以“Xenocide”的领域,并将其添加到列表中

book.name = "Xenocide"; 

这前行是什么,我认为你是忘了。 book是一个单一的对象。您可以将此特定的实例Book传递给任何其他类或方法,并且您始终使用相同的book。大部分你前进的道路总是影响原书(也有一些例外,但不是很多)

做任何改变你需要创建你想要一个不同的BookBook任何时候。这不是可选的,这是任何面向对象语言的要求。