gpt4 book ai didi

c# - 带有 linq .where 子句的空引用异常

转载 作者:太空狗 更新时间:2023-10-29 20:59:00 25 4
gpt4 key购买 nike

我试图从一个可以为 null 的对象数组(数组)中获取一个属性,但我总是得到一个 null 引用异常。

如果它为 null 或返回空字符串,我如何告诉 LINQ 不处理它?<​​/p>

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。如果数组为空,我没有得到告诉 LINQ 不要处理的机制。

phone = c.address.contactItems.Where( ci => ci != null && ci.contactType == ContactType.PHONE).First().contactText

最佳答案

您可以使用 ?:(conditional) operator 检查它是否为 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 现在不能再抛出异常,因为我已经提供了一个默认值。

关于c# - 带有 linq .where 子句的空引用异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14259991/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com