2010-06-11 56 views
0

我已經喜歡從XML文件

<SampleFile> 
<Data> 
    <Element Val="8" /> 
    <Element Val="10" /> 
    <Element Val="12" /> 
    <Element Val="14" /> 
    <Element Val="16" /> 
    <Element Val="9" /> 
    <Element Val="11" /> 
    <Element Val="13" /> 
    <Element Val="15" /> 
    <Element Val="17" /> 
</Data> 
</SampleFile> 

我需要閱讀的「瓦爾」的屬性值,並將其轉換爲int32一個XML文件中添加整數值列表,然後進行排序,然後添加到名單

現在,我使用這樣的:

List<Int32> lst = (XDocument.Load("\\Sample.xml").Descendants("Element").Select(l_Temp => l_Temp.Attribute("Val").Value.ToString()).Cast<Int32>().OrderBy(nTemp => nTemp)).ToList(); 

但它不能正常工作

請給我一個更好的解決方案

+0

在未來,請給比更多細節「它不能正常工作「。你會把你的車帶到車庫,並說「它不能正常工作」,並期望他們能夠在不知道其他情況下修復它嗎?不,你會說實際發生的事情。對開發人員的問題(無論是在這裏還是在別處)都這樣做。 – 2010-06-11 06:06:08

回答

2

首先,讓我們重新設置代碼了一點,所以我們可以清楚地看到發生了什麼事情:

List<Int32> lst = XDocument.Load("\\Sample.xml") 
        .Descendants("Element") 
        .Select(l_Temp => l_Temp.Attribute("Val").Value.ToString()) 
        .Cast<Int32>() 
        .OrderBy(nTemp => nTemp) 
        .ToList(); 

現在,您Select子句選擇串序列 - 雖然ToString調用是不必要的,因爲XAttribute.Value已經是一個字符串。

然後,您嘗試使用Cast<Int32>將這些字符串轉換爲整數。這不是Cast<T>()。它僅執行參考和拆箱轉換。幸運的是,XAttribute有一個明確的轉換int使這一切更簡單:

List<Int32> lst = XDocument.Load("\\Sample.xml") 
          .Descendants("Element") 
          .Select(l_Temp => (Int32) l_Temp.Attribute("Val")) 
          .OrderBy(nTemp => nTemp) 
          .ToList(); 
+0

嗨,喬恩。你是什​​麼意思「它只執行參考和拆箱轉換」 – chiccodoro 2010-06-11 06:11:48

+0

+1 @ Jon Skeet謝謝 – 2010-06-11 06:16:17