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

How can I use the conditional null operator to check for null string?

我正在尝试按如下方式执行 LINQ to objects 查询:

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

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

所以,我认为这似乎是新的 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 条件?

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

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

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

您需要一个合并运算符来将三态转换为正确的布尔值。

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

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

使用 ?? 运算符,例如:

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