我正在尝试获取一些角色信息,但是第一个节点没有元素“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));
}
答案 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 ...