我是整个Linq游戏的新手,所以请原谅我的无知。
我在这里有这段代码:
String tag = "Covers";
XDocument doc = XDocument.Load(file);
IEnumerable<XElement> allDvds = doc.Element("Collection").Elements("DVD");
IEnumerable<XElement> filteredDvds = allDvds.Where(dvd => dvd.Element("Locks").Element(tag).Value == "true");
var dvdInfos = filteredDvds.Select(dvd => new
{
Name = dvd.Element("Title").Value,
UPC = dvd.Element("UPC").Value,
ID = dvd.Element("ID").Value,
}
);
foreach (var dvdInfo in dvdInfos)
{
//...
}
只要标签有一个有效的值,一切都很好。但是,如果标记的值不是 XML 中的标记,当他尝试启动 foreach 循环时,我会收到 NullReferenceException。
我试过if (dvdInfos.Count() > 0)
了,但后来我得到了 NRE。
我也尝试过if (filteredDvds.Count() > 0)
,但又一次 NRE。
有什么建议吗?或者是真正抓住 NRE 并从那里开始的唯一方法?
这是 XML:
<?xml version="1.0" encoding="windows-1252"?>
<Collection>
<DVD>
<ProfileTimestamp>2012-12-08T17:39:16.000Z</ProfileTimestamp>
<ID>4030521726802.5</ID>
<UPC>4-030521-726802</UPC>
<Title>The Amazing Spider-Man</Title>
<!-- ... -->
<Locks>
<Entire>false</Entire>
<Covers>false</Covers>
<Title>true</Title>
<MediaType>true</MediaType>
<Overview>false</Overview>
<Regions>false</Regions>
<Genres>true</Genres>
<SRP>true</SRP>
<Studios>true</Studios>
<DiscInformation>true</DiscInformation>
<Cast>true</Cast>
<Crew>true</Crew>
<Features>false</Features>
<AudioTracks>false</AudioTracks>
<Subtitles>false</Subtitles>
<EasterEggs>false</EasterEggs>
<RunningTime>false</RunningTime>
<ReleaseDate>true</ReleaseDate>
<ProductionYear>false</ProductionYear>
<CaseType>false</CaseType>
<VideoFormats>false</VideoFormats>
<Rating>false</Rating>
</Locks>
</DVD>
</Collection>