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.ProductNameda EF den ?.Operator derzeit nicht unterstützt .
Foo?.Barist nicht gleichbedeutend mit,Foo != null ? Foo.Bar : nulldaFooeinmal mit dem sich null ausbreitenden Operator und zweimal mit der Bedingung ausgewertet wird, sodass die Übersetzung nicht in allen Fällen korrekt wäre.