【发布时间】:2009-10-07 04:53:16
【问题描述】:
我对 .NET 很陌生,对 LINQ 更是如此,我刚刚开始探索我正在从事的一个小项目。
我有一个从应用程序生成的 XML 文件,其中包含一些我想解析为专有格式并保存在文件中的值。
我能够使一个 LINQ 查询正常工作,将值返回到我的控制台应用程序。然后第二个查询运行,也返回请求的值,但是 then 抛出 NRE!为什么返回第三个值后它不停止对结果集的迭代?
首先,这是 XML 文件的摘录:
<analyse>
<sample>Leer 12</sample> sample ID and number
<id>Leer</id> sample ID
</analyse>
<results>
<element>
<name>c</name>
<value>0.000186156337031958</value>
</element>
<element>
<name>co2</name>
<value>0.000682099902270885</value>
</element>
<element>
<name>s</name>
<value>0.000121750914950204</value>
</element>
<element>
<name>so3</name>
<value>0.000304028592755094</value>
</element>
</results>
这是第一个 LINQ 查询:
XDocument uniSample = XDocument.Load(limsfile);
var analyse = uniSample.Descendants("analyse").Select(el => new
{
Sample = el.Element("sample").Value,
Id = el.Element("id").Value
});
foreach (var el in analyse)
{
Console.WriteLine("Sample: " + el.Sample);
Console.WriteLine("Sample ID: " + el.Id);
}
这是第二个 LINQ 查询: (请注意我不得不重命名匿名类型 Value,因为它似乎与某些东西冲突)
var results = uniSample.Descendants("element").Select(elements => new
{
Name = elements.Element("name").Value,
Verdi = elements.Element("value").Value
});
foreach (var el in results)
{
Console.WriteLine("Name: " + el.Name);
Console.WriteLine("Value: " + el.Verdi);
}
现在程序的输出看起来像你期望的那样
Sample: Leer 12
Sample ID: Leer
Name: c
Value: 0.000186156337031958
Name: co2
Value: 0.000682099902270885
Name: s
Value: 0.000121750914950204
Name: so3
Value: 0.000304028592755094
...但是在第三次迭代之后,NRE 被抛出,指向后面的 LINQ 查询。为什么它不像第一次那样退出 foreach 循环??
编辑:实际上是在第四次迭代之后,抱歉混淆了! :) 谢谢!
【问题讨论】:
标签: c# linq-to-xml