2

我在尝试解析从 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).

似乎它不起作用。当(在循环中)分配eto的值时,我收到错误消息:testforeach

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

所以我尝试这样Convert eInt32(正如您在上面的代码中看到的那样),但这也不起作用,我得到了同样的错误:System.InvalidCastException.

有谁知道如何解决匿名类型的解析,int或者更好的是,解析和总结中的值var vikttjurar

4

2 回答 2

4

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

    foreach (var e in vikttjurar)
    {

        test = e.tvikt;

    }

顺便说一句,该XElement类型支持显式转换Int32(or int),因此在您的 Linq 语句中,您可以:

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

}...
于 2013-11-06T17:20:41.907 回答
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
}
于 2013-11-06T17:20:32.973 回答