为什么这样的工作如下:
XDocument dataFeed = XDocument.Parse(e.Result);
var guide = from query in dataFeed.Descendants("MaxPayne3")
select new NewGamesClass
{
GameID = (string)query.Element("ID"),
GameTitle = (string)query.Element("Title"),
GameDescription = (string)query.Element("Description"),
GameGuide = (string)query.Element("Guide")
};
if (NavigationContext.QueryString.TryGetValue("selectedItem", out selectedIndex))
{
if (selectedIndex == "0")
GuidesListBox.ItemsSource = guide.Where(ngc => ngc.GameTitle.StartsWith("Feel"));
else if (selectedIndex == "1")
GuidesListBox.ItemsSource = guide.Where(ngc => ngc.GameTitle.StartsWith("Serious"));
但不是这样的:
if (selectedIndex == "0")
GuidesListBox.ItemsSource = guide.Where(ngc => ngc.GameID.StartsWith("000"));
else if (selectedIndex == "1")
GuidesListBox.ItemsSource = guide.Where(ngc => ngc.GameID.StartsWith("001"));
我想使用GameID而不是GameTitle。
很抱歉没有XML,对我来说太早了,哈哈,
下面: https://dl.dropbox.com/u/27136243/AchivementHunters/XML/GameList.xml
这是班级:
public class NewGamesClass
{
string gameID;
string gameTitle;
string gamedescription;
string gameImage;
string gameGuide;
string videoLink;
public string GameID
{ get { return gameID; } set { gameID = value; } }
public string GameTitle
{ get { return gameTitle; } set { gameTitle = value; } }
public string GameDescription
{ get { return gamedescription; } set { gamedescription = value; } }
public string GameImage
{ get { return gameImage; } set { gameImage = value; } }
public string GameGuide
{ get { return gameGuide; } set { gameGuide = value; } }
public string VideoLink
{ get { return videoLink; } set { videoLink = value; } }
}
答案 0 :(得分:2)
大多数<MaxPayne3>
节点没有子<ID>
节点,因此这段代码:
select new NewGamesClass
{
GameID = (string)query.Element("ID"),
GameTitle = (string)query.Element("Title"),
GameDescription = (string)query.Element("Description"),
GameGuide = (string)query.Element("Guide")
}
将主要为GameID
生成空值。然后这段代码:
guide.Where(ngc => ngc.GameID.StartsWith("000"))
将为所有这些元素抛出NullReferenceException
将其更改为:
guide.Where(ngc => !String.IsNullOrEmpty(ngc.GameID) && ngc.GameID.StartsWith("000"))
它应该可以正常工作。
答案 1 :(得分:0)
鉴于我们没有数据,这里唯一重要的区别是.GameTitle.
vs .GameID.
。我假设“不会工作”这里意味着“它会引发异常”。我可以预测的主要例外是NullReferenceException
,因为.GameID
是null
,所以.GameID.anything
是非法的。
这让我觉得<ID>whatever</ID>
在您认为的位置不存在(这会导致.GameID
成为null
引用)。要验证的事情:
ID
,Id
,id
等)更新:这是数据中的问题:
<MaxPayne3>
<Title>Part I Complete - 20G</Title>
<Description>Complete Part I Of The Story</Description>
<Guide>Story related, cannot be missed.</Guide>
<Image>http://www.xbox360achievements.org/images/achievements/925/-K6lMA==.jpg</Image>
<VideoLink/>
</MaxPayne3>
没有<ID>
。还有很多这样的事情。所以:你需要处理它。务实的检查将是:
...blah...guide.Where(ngc => ngc.GameID != null && ngc.GameID.StartsWith("000"));