我在尝试解析从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
e
到Int32
(正如您在上面的代码中看到的那样)但是也无法正常工作,我得到同样的错误:System.InvalidCastException
有谁知道如何解决从匿名类型到int
的解析,或者甚至更好地解析和总结var vikttjurar
中的值?
答案 0 :(得分:4)
您已经在linq语句中完成了转换,并使用单个属性tvikt
创建了匿名对象。现在你只需要查找它:
foreach (var e in vikttjurar)
{
test = e.tvikt;
}
顺便说一句,XElement
类型支持explicit conversion到Int32
(或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
}