Często używam operatora propagującego wartość null w moim kodzie, ponieważ daje mi to bardziej czytelny kod, szczególnie w długich zapytaniach nie muszę sprawdzać wartości null każdej używanej klasy.
Poniższy kod zgłasza błąd kompilacji, którego nie możemy użyć operatora propagującego wartość null w wyrażeniu lambda.
var cnt = humans.AsQueryable().Count(a => a.House?[0].Price == 5000);
Błąd :
Błąd CS8072 Lambda drzewa wyrażeń nie może zawierać operatora propagującego wartość null.
C # Można łatwo przetłumaczyć powyższy kod na kod na następujący kod, jeśli naprawdę nie można zrobić nic innego!
var cnt = humans.AsQueryable().Count(a => a.House != null && a.House[0].Price == 5000);
Jestem ciekawy, dlaczego C # nic nie robi i po prostu zgłasza błąd kompilatora?
Foo?.Bar
nie jest równoważne z,Foo != null ? Foo.Bar : null
ponieważFoo
jest obliczane raz za pomocą operatora propagującego wartość null i dwukrotnie za pomocą warunku, więc tłumaczenie nie byłoby poprawne we wszystkich przypadkach.