带有一个项目的C#Xml.Linq集合返回"对象引用未设置为对象的实例"使用.ToList()

时间:2015-04-17 11:48:39

标签: c# xml linq

我有一个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");
}

3 个答案:

答案 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