我上课了:
public class Layout
{
public int Width { get; set; }
public int Height { get; set; }
}
如何读取XML属性并将其从上面的类中分配给以下LINQ查询中的int:
var layouts =
from elem in layoutSummary.Descendants("Layout")
select new Layout
{
// Width = elem.Attribute("Width").Value, // Invalid cast string to int)
// Int32.TryParse((string)elem.Attribute("Height").Value, Height) // Doesn't assign Height value to Layout.Height
};
答案 0 :(得分:4)
请改为尝试:
var layouts = from elem in layoutSummary.Descendants("Layout")
select new ComicLayout
{
Width = (int) elem.Attribute("Width"),
Height = (int) elem.Attribute("Height")
};
这使用XAttribute
到int
提供的显式转换运算符,您可以在其{MS}页面找到here。
现在显然,如果转换失败,这将抛出FormatException
。如果那不是你想要的,请说明你想要发生什么。 可能(如果有点不方便)在这里使用int.TryParse
,但必须以不同的方式完成。
答案 1 :(得分:3)
尝试Convert.ToInt32
方法
select new ComicLayout
{
Width = Convert.ToInt32( elem.Attribute("Width").Value),
Height = Convert.ToInt32(elem.Attribute("Height").Value)
};
答案 2 :(得分:2)
select new ComicLayout
{
Width = elem.Attribute("Width") != null ?
Convert.ToInt32(elem.Attribute("Width").Value) :
-1,
Height = elem.Attribute("Height") != null ?
Convert.ToInt32(elem.Attribute("Height").Value) :
-1,
};
答案 3 :(得分:1)
Width = int.Parse(elem.Attribute("Width").Value)
或
int w;
if (int.TryParse(elem.Attribute("Width").Value, out w)
Width = w;
答案 4 :(得分:1)
您需要Convert.ToInt32
我还建议添加检查以确保它是一个int,这样你就不会尝试将“三”转换为整数。但我想这取决于你对xml回来的控制程度。