2010-01-28 45 views
2

我想抓住一些角色信息,但第一個節點沒有元素「projectRoleType」我想跳過那一個,只抓住那些有「projectRoleType」和「categoryId」的。每一次我嘗試檢查我總是得到錯誤:對象引用未設置爲對象的實例。我沒做什麼?LINQ to XML錯誤:對象引用未設置爲對象的實例

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)); 
      } 

回答

4

如果您嘗試訪問該成員或調用的null的方法你得到一個NullReferenceException。例如,r1.Element("projectRoles").Element("projectRoleType")回報null如果沒有projectRoleType元素projectRoles,所以得到的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 ... 
相關問題