C# - 将匿名类型解析为int32

时间:2013-11-06 17:18:38

标签: c# xml

我在尝试解析从XML文件中检索的值时遇到问题。我在变量toList()中存储了var个值,我希望将它们转换为Int32并对它们进行汇总。这是我正在使用的方法:

public void ViktTjurar()
{
    string år = TextBoxÅr.Text;
    int test= 0;
    int summa = 0;
    XElement vikt =  XElement.Load(path);


    var vikttjurar = (from h in vikt.Descendants("älgrapport")
                      where (string)h.Element("år") == år && (string)
                      h.Element("typ") == "Tjur"
                      select new
                      {
                          tvikt = int.Parse(h.Element("Vikt").Value),

                      }).ToList();

    //List<int> vikter1 = new List<int>();
    foreach (var e in vikttjurar)
    {
        test = Convert.ToInt32(e);                             
    }
} 

目前,我从XML文件中获取3个值,存储在var vikttjurar中,我认为我使用tvikt = int.Parse(h.Element("Vikt").Value)正确解析了它们。

它似乎不起作用。将e的值分配给test(在foreach循环中)时,我会收到错误消息:

  

无法将类型'AnonymousType#1'隐式转换为'int'

所以我尝试Convert eInt32(正如您在上面的代码中看到的那样)但是也无法正常工作,我得到同样的错误:System.InvalidCastException

有谁知道如何解决从匿名类型到int的解析,或者甚至更好地解析和总结var vikttjurar中的值?

2 个答案:

答案 0 :(得分:4)

您已经在linq语句中完成了转换,并使用单个属性tvikt创建了匿名对象。现在你只需要查找它:

    foreach (var e in vikttjurar)
    {

        test = e.tvikt;

    }

顺便说一句,XElement类型支持explicit conversionInt32(或int),因此在您的Linq语句中,您可以:

...select new
{
    tvikt = (int)h.Element("Vikt"),

}...

答案 1 :(得分:2)

这样做,你已经解析了int

test = e.tvikt;

此外,您可以稍微简化整个代码:

var vikttjurar = (from h in vikt.Descendants("älgrapport")
                  where (string)h.Element("år") == år && (string)
                  h.Element("typ") == "Tjur"
                  select int.Parse(h.Element("Vikt").Value))
                 .ToList();

//List<int> vikter1 = new List<int>();
foreach (var e in vikttjurar)
{
    test = e; // e is an int here
}