Uso spesso l'operatore di propagazione nullo nel mio codice perché mi dà un codice più leggibile, specialmente nelle query lunghe non devo controllare nullo ogni singola classe che viene utilizzata.
Il codice seguente genera un errore di compilazione che non è possibile utilizzare l'operatore di propagazione null in lambda.
var cnt = humans.AsQueryable().Count(a => a.House?[0].Price == 5000);
L'errore :
Errore CS8072 Un lambda della struttura ad albero delle espressioni potrebbe non contenere un operatore di propagazione nullo.
C # Potrebbe facilmente tradurre il codice sopra nel codice nel codice seguente se davvero non puoi fare nient'altro!
var cnt = humans.AsQueryable().Count(a => a.House != null && a.House[0].Price == 5000);
Sono curioso del motivo per cui C # non fa nulla e genera semplicemente un errore del compilatore?
var q = from c in Categories join p in Products on c equals p.Category into ps from p in ps.DefaultIfEmpty() select new { Category = c, ProductName = (p?.ProductName)??"(No products)"};
invece di dover scrivere ProductName = (p == null) ? "(No products)" : p.ProductName
perché EF attualmente non supporta l' ?.
operatore.
Foo?.Bar
non è equivalente aFoo != null ? Foo.Bar : null
perchéFoo
viene valutato una volta con l'operatore di propagazione null e due volte con il condizionale, quindi la traduzione non sarebbe corretta in tutti i casi.