Snažím sa spustiť dotaz LINQ na objekty nasledovne:
var c1 = allCustomers
.Where(x => x.CompanyName.Replace(""", "").StartsWith(searchText))
.ToList();
Funguje to tak dlho, kým CompanyName nie je null.
Myslel som, že to vyzerá ako ideálne miesto pre nového nulového podmieneného operátora! Stačí prejsť na:
var c1 = allCustomers
.Where(x => x.CompanyName?.Replace(""", "").StartsWith(searchText))
.ToList();
a všetko by malo fungovať!
Namiesto toho sa vyskytla chyba:
Cannot implicitly convert type "bool?" to "bool". An explicit conversion exists (are you missing a cast?)
"Nie som si celkom istý, ako splniť to, čo tu chcem. Ako by som v tomto scenári použil null?"
odpovede:
5 pre odpoveď č. 1Na to, aby ste premenili tri-stav na správny boolean, potrebujete operátora.
var c1 = allCustomers
.Where(x => x.CompanyName?.Replace(""", "").StartsWith(searchText) ?? false)
.ToList();
Volám bool?
tri-stav, pretože môže mať tri hodnoty: true
, false
a null
; preto konvertovanie bool?
na bool
je zužujúca sa konverzia, ktorá vyžaduje explicitné ošetrenie.
1 pre odpoveď č. 2
potrebujete viac otáznikov! Myslím si, že aj null potrebujete spojenie x.CompanyName?.Replace
teraz sa môže vrátiť aj null.
(x.CompanyName?.Replace(""", "") ?? string.Empty).StartsWith(searchText))
na ?? string.empty
núti, aby to bol nenulový reťazec, ktorý teraz podporuje .startswith
1 pre odpoveď č. 3
použitie ??
operátor:
Where(x => x.CompanyName?.Replace(""", "").StartsWith(searchText) ?? false)