Как я могу использовать условный нулевой оператор для проверки нулевой строки?
Я пытаюсь выполнить запрос 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