大家好!我找不到解释正确编码方式的教程。我认为从标题和代码中可以清楚地知道我正在尝试做什么。我收到的两个错误是我的if语句位于错误的位置,并且变量'Arrow'已分配但从未使用过。我知道这归结为简单的语法,所以我感谢大家的时间。
void DATABASEinfo_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
{
if (e.Error != null)
return;
XElement xmlitem = XElement.Parse(e.Result);
var list = new List<DATABASEinfoViewModel>();
foreach (XElement item in xmlitem.Element("channel").Elements("item"))
{
var title = item.Element("title");
var titlevalue = (title == null) ? null : title.Value;
var description = item.Element("description");
var descriptionvalue = (description == null) ? null : description.Value;
var arrow = (xmlitem.Element("title").Value.Contains("DATABASE Up"))
? "up" : null;
list.Add(new DATABASEinfoViewModel
{
Title = titlevalue,
Description = descriptionvalue,
Arrow = arrow,
});
}
DATABASEinfoList.ItemsSource = list;
}
public class DATABASEinfoViewModel
{
public string Title { get; set; }
public string Description { get; set; }
public string Arrow { get; set; }
奇怪的是,如果我改变:
var arrow = (xmlitem.Element("title").Value.Contains("DATABASE Up"))
要:
var arrow = (xmlitem.Element("channel").Value.Contains("DATABASE Up"))
它显示所有条目的“向上”。以下是XML文件的示例:
<rss version="2.0">
<channel>
<title> DATABASE Status</title>
<description>DATABASE status updates</description>
<item>
<title>First status is DATABASE Up</title>
<description>First Content</description>
</item>
<item>
<title>Second status is DATABASE Up</title>
<description>Second Content</description>
</item>
</channel>
答案 0 :(得分:0)
如果没有返回可以分配给var箭头的结果。
你试图做这样的事情?
string arrow = "";
if (xmlitem.Element("description").Value.Contains("DATABASE Up"))
{
arrow = ("up");
}
答案 1 :(得分:0)
我不清楚你要做什么。如果description
包含“DATABASE Up”,您希望arrow
的值为“up”,否则为什么?空?
string arrow = null;
if (xmlitem.Element("description").Value.Contains("DATABASE Up"))
{
arrow = ("up");
}
或
var arrow = (xmlitem.Element("description").Value.Contains("DATABASE Up"))
? "up" : null;
修改强>
为什么你在foreach循环中再次设置DATABASEinfoList.ItemsSource = list
并再次在外面?内部应该可以消失。
此外,还有一个固有的问题,你在Mick的答案中的评论显示..这些电话:
item.Element("[elementName]").Value
假设元素存在。如果没有,你将在null上调用Value
Property getter,抛出NullReferenceException。如果元素有可能为null,那么在调用Value之前需要检查它:
var element = item.Element("[elementName]");
var value = (element == null) ? null : element.Value;
答案 2 :(得分:0)
该行
var arrow = (xmlitem.Element("title").Value.Contains("DATABASE Up"))
实际应该是
var arrow = (item.Element("title").Value.Contains("DATABASE Up"))
您应该查询项,而不是 xmlitem 。
如其他答案中所述,您还应该在访问其值之前检查元素是否存在。