Arn*_*501 6 c# linq arrays null
我试图从一个可以为null(数组)的对象数组中获取属性,并且我总是得到一个空引用异常.
如果它为null或返回空字符串,我怎么能告诉LINQ不处理它?
foreach (Candidate c in candidates) {
   results.Add(new Person 
      { 
         firstName = c.firstname, //ok
         lastName = c.Name, //ok
         // contactItems is an array of ContactItem
         // so it can be null that's why I get null exception 
         // when it's actually null
         phone = c.address.contactItems.Where( ci => ci.contactType == ContactType.PHONE).First().contactText 
      }
   );
}
我也尝试过不要取消null.如果数组为null,我没有得到告诉LINQ不处理的机制.
phone = c.address.contactItems.Where( ci => ci != null && ci.contactType == ContactType.PHONE).First().contactText
Tim*_*ter 11
您可以检查它是否null与?:(条件)运算符一起:
phone = c.address.contactItems == null ? ""
    : c.address.contactItems.Where( ci => ci.contactType == ContactType.PHONE).First().contactText 
如果First抛出异常,因为没有人ContactType.PHONE可以使用DefaultIfEmpty自定义默认值:
c.address.contactItems.Where( ci => ci.contactType == ContactType.PHONE)
                      .DefaultIfEmpty(new Contact{contactText = ""})
                      .First().contactText 
请注意,First现在不能再抛出异常了,因为我提供了一个默认值.