linq .where子句的null引用异常

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 
      }
   );
}
Run Code Online (Sandbox Code Playgroud)

我也尝试过不要取消null.如果数组为null,我没有得到告诉LINQ不处理的机制.

phone = c.address.contactItems.Where( ci => ci != null && ci.contactType == ContactType.PHONE).First().contactText
Run Code Online (Sandbox Code Playgroud)

Tim*_*ter 11

您可以检查它是否null?:(条件)运算符一起:

phone = c.address.contactItems == null ? ""
    : c.address.contactItems.Where( ci => ci.contactType == ContactType.PHONE).First().contactText 
Run Code Online (Sandbox Code Playgroud)

如果First抛出异常,因为没有人ContactType.PHONE可以使用DefaultIfEmpty自定义默认值:

c.address.contactItems.Where( ci => ci.contactType == ContactType.PHONE)
                      .DefaultIfEmpty(new Contact{contactText = ""})
                      .First().contactText 
Run Code Online (Sandbox Code Playgroud)

请注意,First现在不能再抛出异常了,因为我提供了一个默认值.