Costumo usar o operador de propagação nulo em meu código porque ele me dá um código mais legível, especialmente em consultas longas, não preciso verificar o valor nulo de todas as classes usadas.
O código a seguir lança um erro de compilação de que não podemos usar o operador de propagação nulo em lambda.
var cnt = humans.AsQueryable().Count(a => a.House?[0].Price == 5000);
O erro :
Erro CS8072 Um lambda de árvore de expressão não pode conter um operador de propagação nulo.
C # poderia facilmente traduzir o código acima para o código a seguir se realmente não puder fazer mais nada!
var cnt = humans.AsQueryable().Count(a => a.House != null && a.House[0].Price == 5000);
Estou curioso para saber por que o C # não faz nada e simplesmente lança um erro do 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)"};
vez de ter que escrever ProductName = (p == null) ? "(No products)" : p.ProductName
porque EF atualmente não suporta o ?.
operador.
Foo?.Bar
não é equivalente aFoo != null ? Foo.Bar : null
porqueFoo
é avaliado uma vez com o operador de propagação nula e duas vezes com o condicional, de modo que a tradução não seria correta em todos os casos.