如何使用条件空运算符来检查空字符串?

时间:2016-04-22 23:47:44

标签: c# linq-to-objects null-conditional-operator

我试图按如下方式执行LINQ to objects查询:

var c1 = allCustomers
    .Where(x => x.CompanyName.Replace("'", "").StartsWith(searchText))
    .ToList();

只要CompanyName不为null,就可以正常工作。

所以,我认为这似乎是新的null条件运算符的理想位置!只需改为:

var c1 = allCustomers
    .Where(x => x.CompanyName?.Replace("'", "").StartsWith(searchText))
    .ToList();

一切都应该有用!

相反,我得到错误:

Cannot implicitly convert type 'bool?' to 'bool'. An explicit conversion exists (are you missing a cast?)

我不太确定如何在这里完成我想要的东西。在这种情况下我如何使用null条件?

3 个答案:

答案 0 :(得分:5)

您需要一个coalesce运算符将三态转换为适当的布尔值。

var c1 = allCustomers
    .Where(x => x.CompanyName?.Replace("'", "").StartsWith(searchText) ?? false)
    .ToList();

我将bool?称为三态,因为它可以有三个值:truefalsenull;因此,将bool?转换为bool是一种需要明确处理的缩小转换。

答案 1 :(得分:1)

你需要更多问号!我认为你也需要空合并,因为x.CompanyName?.Replace现在也可以返回null。

(x.CompanyName?.Replace("'", "") ?? string.Empty).StartsWith(searchText))

?? string.empty强制为非空字符串,现在支持.startswith

答案 2 :(得分:1)

使用??运算符,如:

Where(x => x.CompanyName?.Replace("'", "").StartsWith(searchText) ?? false)