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现在不能再抛出异常了,因为我提供了一个默认值.