Как я могу использовать условный нулевой оператор для проверки нулевой строки?

Я пытаюсь выполнить запрос LINQ to objects следующим образом:

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

Это работает нормально, пока CompanyName не является нулевым.

Я подумал, что это идеальное место для нового нулевого условного оператора! Просто измените на:

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?)

Я не совсем уверен, как сделать то, что я хочу здесь. Как бы я использовал нулевое условие в этом сценарии?

3 ответа

Решение

Вам нужен оператор объединения, чтобы преобразовать три состояния в правильное логическое значение.

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

Я звоню bool? три состояния, потому что оно может иметь три значения: true, false а также null; следовательно, преобразование bool? в bool это сужающее преобразование, которое требует явного обращения.

Использование ?? оператор как:

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

Вам нужно больше вопросительных знаков! я думаю, что вам также нужно объединение нулей, так как x.CompanyName?.Replace теперь может также вернуть ноль.

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

?? string.empty заставляет это быть ненулевой строкой, которая теперь поддерживает .startswith

Другие вопросы по тегам