/ / Ako môžem použiť podmienený null operátor na kontrolu null reťazca? - c #, linq-to-objects, null-conditional-operator

Ako môžem použiť podmieneného operátora null na kontrolu nulového reťazca? - c #, linq-to-objects, null-conditional-operator

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ď č. 1

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