我在WP7项目中填充饼图时遇到了一些麻烦。目前,我的代码如下。我尝试了几种不同的方法将数据从xml Web服务中恢复,但没有运气。谁能看到我做错了什么?
我现在得到的错误是,“无法将类型'System.Collections.Generic.IEnumerable'隐式转换为'System.Xml.Linq.XElement'。存在显式转换(您是否错过了转换?) “
XDocument XDocument = XDocument.Load(new StringReader(e.Result));
XElement Traffic = XDocument.Descendants("traffic").First();
XElement Quota = XDocument.Descendants("traffic").Attributes("quota");
ObservableCollection<PieChartItem> Data = new ObservableCollection<PieChartItem>()
{
new PieChartItem {Title = "Traffic", Value = (double)Traffic},
new PieChartItem {Title = "Quota", Value = (double)Quota},
};
pieChart1.DataSource = Data;
答案 0 :(得分:2)
我的猜测是这行有编译错误:
XElement Quota = XDocument.Descendants("traffic").Attributes("quota");
Descendants("traffic")
的结果是IEnumerable
,而不是XElement
。在上面一行中,您已经获得了可枚举的First
,这是您想要的项目,不是吗?
配额行应为:
XElement Quota = Traffic.Attributes("quota");
风格方面,大多数人都会将局部变量设置得较低,例如traffic
和quota
以及data
,以区别于类级属性和成员。
更新:看起来Attributes("quota")
会返回IEnumerable<XAttribute>
,因此配额行应为:
XAttribute Quota = Traffic.Attributes("quota").FirstOrDefault();
或简化:
var traffic = XDocument.Descendants("traffic").First();
var quota = traffic.Attributes("quota").FirstOrDefault();
我不想意味着,但修复像这样的编译器错误应该是你不应该为stackoverflow而来的东西。编译器错误本身告诉你问题是什么:该方法返回的类型不是你所说的那样。使用var
可以简化其中的一部分。