如何在LINQ查询期间将XML属性(字符串)解析为(int)

时间:2012-01-02 16:07:37

标签: c# xml linq

我上课了:

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
    };

5 个答案:

答案 0 :(得分:4)

请改为尝试:

var layouts =  from elem in layoutSummary.Descendants("Layout")
               select new ComicLayout
               {
                   Width = (int) elem.Attribute("Width"),
                   Height = (int) elem.Attribute("Height")
               };

这使用XAttributeint提供的显式转换运算符,您可以在其{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回来的控制程度。