我有一个像
这样的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>
我需要读取“Val”的属性值并将其转换为Int32,然后排序然后添加到列表中
现在我正在使用:
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 :(得分: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();
答案 1 :(得分:0)