我有一个示例xml文件,如下所示:
<Books>
<Category Genre="Fiction" BookName="book_name" BookPrice="book_price_in_$" />
<Category Genre="Fiction" BookName="book_name" BookPrice="book_price_in_$" />
<Category Genre="NonFiction" BookName="book_name" BookPrice="book_price_in_$" />
<Category Genre="Children" BookName="book_name" BookPrice="book_price_in_$" />
</Books>
Run Code Online (Sandbox Code Playgroud)
我需要收集所有的书籍名称和书价,并传递给其他方法.现在,我List<string>使用以下命令将所有书籍名称和书籍价格分别分为两个:
List<string>BookNameList = root.Elements("Category").Select(x => (string)x.Attribute("BookName")).ToList();
List<string>BookPriceList = root.Elements("Category").Select(x => (string)x.Attribute("BookPrice")).ToList();
Run Code Online (Sandbox Code Playgroud)
我创建了一个文本文件并将其发送回调用函数(在文本文件中输出这些结果是必需的,文本文件有两个字段bookname和bookprice).
要写入文本文件,请使用以下代码:
for(int i = 0; i < BookNameList.Count; i++)
{
//write BookNameList[i] to file
// Write BookPriceList[i] to file
}
Run Code Online (Sandbox Code Playgroud)
我对这种方法感觉不太好.假设由于任何原因两个列表的大小不同.现在我不考虑这一点,我觉得使用foreach效率更高(我可能错了).是否可以从LINQ中读取数据结构(具有两个属性名称和价格)的条目?然后我可以使用foreach轻松迭代该数据结构的列表.
我正在使用C#进行编程.
谢谢,
[编辑]:感谢大家的超快反应,我选择了第一个答案.
GWB*_*GWB 10
选择:
var books = root.Elements("Category").Select(x => new {
Name = (string)x.Attribute("BookName"),
Price = (string)x.Attribute("BookPrice")
}).ToList();
Run Code Online (Sandbox Code Playgroud)
循环:
foreach (var book in books)
{
// do something with
// book.Name
// book.Price
}
Run Code Online (Sandbox Code Playgroud)