Ich verwende häufig einen Null-Propagierungsoperator in meinem Code, weil er mir besser lesbaren Code bietet, insbesondere bei langen Abfragen, bei denen ich nicht jede einzelne verwendete Klasse auf Null prüfen muss.
Der folgende Code löst einen Kompilierungsfehler aus, für den in Lambda kein Null-Propagierungsoperator verwendet werden kann.
var cnt = humans.AsQueryable().Count(a => a.House?[0].Price == 5000);
Der Fehler :
Fehler CS8072 Ein Ausdrucksbaum-Lambda enthält möglicherweise keinen Null-Propagierungsoperator.
C # Könnte den obigen Code leicht in den Code in den folgenden Code übersetzen, wenn wirklich nichts anderes möglich ist!
var cnt = humans.AsQueryable().Count(a => a.House != null && a.House[0].Price == 5000);
Ich bin gespannt, warum C # nichts tut und einfach einen Compilerfehler auslöst.
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)"};
anstatt schreiben zu müssen, ProductName = (p == null) ? "(No products)" : p.ProductName
da EF den ?.
Operator derzeit nicht unterstützt .
Foo?.Bar
ist nicht gleichbedeutend mit,Foo != null ? Foo.Bar : null
daFoo
einmal mit dem sich null ausbreitenden Operator und zweimal mit der Bedingung ausgewertet wird, sodass die Übersetzung nicht in allen Fällen korrekt wäre.