我對.NET相當陌生,對LINQ來說更是如此,對於我正在開發的一個小項目我剛剛開始探索。LINQ to XML NullReferenceException AFTER返回結果?
我有一個XML文件從一個應用程序生成,該應用程序包含一些我想要解析爲專有格式並保存在文件中的值。
我能夠使一個LINQ查詢工作正常,返回值到我的控制檯應用程序。然後第二個查詢運行,也返回請求的值,但然後拋出一個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查詢: (注意我是如何重新命名anonynous類型的值,因爲它似乎與某物有衝突)
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循環?
編輯:其實它是在第四次迭代後,對不起混合! :) 謝謝!
啊是的,我現在看到在XML文件中還有其他元素!我只想分析那些元素的子元素的元素,其中我只有一個元素。 –
tplive
2009-10-02 12:47:30
我並不熟悉您提出的有關強制查詢熱切評估的建議。你能詳細說明一下嗎? – tplive 2009-10-02 12:57:05