LINQ to XML错误:未将对象引用设置为对象的实例

时间:2010-01-28 16:14:39

标签: c# xml linq

我正在尝试获取一些角色信息,但是第一个节点没有元素“projectRoleType”我想跳过那个,只抓住那些有“projectRoleType”和“categoryId”的元素。我尝试检查的每一种方法总是得到错误:对象引用未设置为对象的实例。我不做什么?

var _role = from r1 in loaded.Descendants("result")
                        let catid = (string)r1.Element("projectRoles").Element("projectRoleType").Element("categoryId")
                        where catid != null && catid == categoryId
                        select new
                        {
                            id = (string)r1.Element("projectRoles").Element("projectRoleType").Element("id"),
                            name = (string)r1.Element("fullName"),
                            contactId = (string)r1.Element("contactId"),
                            role_nm = (string)r1.Element("projectRoles").Element("projectRoleType").Element("name")
                        };
            foreach (var r in _role)
            {
                fields.Add(new IAProjectField(r.id, r.role_nm, r.name, r.contactId));
            }

1 个答案:

答案 0 :(得分:4)

如果您尝试访问该成员或调用null方法,则会出现NullReferenceException。例如,如果 projectRoles 中没有 projectRoleType 元素,则r1.Element("projectRoles").Element("projectRoleType")会返回null,因此从 categoryId 中获取 categoryId 子元素null会抛出异常。

添加空检查:

from r1 in loaded.Descendants("result")

let projectRoleType = r1.Element("projectRoles").Element("projectRoleType")
where projectRoleType != null

let catid = (string)projectRoleType.Element("categoryId")
where catid == categoryId

select ...