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.ProductName
porque EF actualmente no admite el ?.
operador.
Foo?.Bar
no es equivalente aFoo != null ? Foo.Bar : null
porqueFoo
se 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.