A menudo uso un operador de propagación nulo en mi código porque me da un código más legible, especialmente en consultas largas, no tengo que verificar cada clase que se usa.
El siguiente código arroja un error de compilación que no podemos usar un operador de propagación nulo en lambda.
var cnt = humans.AsQueryable().Count(a => a.House?[0].Price == 5000);
El error :
Error CS8072 Una lambda de árbol de expresión no puede contener un operador de propagación nulo.
C # ¡Podría traducir fácilmente el código anterior al código siguiente si realmente no puede hacer nada más!
var cnt = humans.AsQueryable().Count(a => a.House != null && a.House[0].Price == 5000);
Tengo curiosidad por saber por qué C # no hace nada y simplemente arroja un error del compilador.
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)"};lugar de tener que escribir ProductName = (p == null) ? "(No products)" : p.ProductNameporque EF actualmente no admite el ?.operador.
Foo?.Barno es equivalente aFoo != null ? Foo.Bar : nullporqueFoose evalúa una vez con el operador de propagación nula y dos veces con el condicional, por lo que la traducción no sería correcta en todos los casos.