我有一个List<XElement>
,其中包含许多XML元素。当我使用Where()
方法时,我设法成功找到一个项目。
使用First()
成功返回该项,如果我使用Any()
,则返回true。但是,如果我使用Count()
或ToList()
,则会返回Object reference not set to an instance of an object.
非常感谢提前。
//Elements:
<meta name="ncc:sidebars" content="0" xmlns="http://www.w3.org/1999/xhtml" />
<meta name="ncc:setInfo" content="1 of 1" xmlns="http://www.w3.org/1999/xhtml" />
<meta name="ncc:tocItems" content="12" xmlns="http://www.w3.org/1999/xhtml" />
<meta name="ncc:totalTime" content="8:02:54" xmlns="http://www.w3.org/1999/xhtml" />
<!-- another 30 other elements... -->
<meta http-equiv="Content-type" content="text/html; charset=ISO-8859-1" xmlns="http://www.w3.org/1999/xhtml" />
public static List<XElement> GetElements(this List<XElement> els, String nameTag)
{
var elementsFound = els.Where(e => e.Attribute("name").Value.ToLower() == "ncc:totaltime");
if (elementsFound.Any())
return elementsFound.ToList();
else
throw new Exception("Some text");
}
答案 0 :(得分:2)
这应该有效:
var elementsFound = els.Where(e => e.Attribute("name") != null && e.Attribute("name").Value.ToLower() == nameTag);
if (elementsFound.Any())
return elementsFound.ToList();
else
throw new Exception("Some text");
答案 1 :(得分:0)
我认为您的一个或多个XElement对象没有名为“name”的属性。所有LINQ查询(在本例中为“where”)仅在您实际使用结果时才会执行。
答案 2 :(得分:0)
列表中有一个项目,其中包含一个返回null
的属性。 这不是第一个。 .Any()
和First()
将在Enumerable上循环,直到找到满足条件的第一个元素。
ToList()
将遍历所有元素 - &gt;一个属性返回null
,调用.ToLower
实例方法将导致NullReferenceException