Saya sering menggunakan operator penyebaran null dalam kode saya karena memberi saya kode yang lebih mudah dibaca, khususnya dalam kueri yang panjang, saya tidak perlu memeriksa null setiap kelas yang digunakan.
Kode berikut memunculkan kesalahan kompilasi bahwa kita tidak dapat menggunakan operator propagasi null di lambda.
var cnt = humans.AsQueryable().Count(a => a.House?[0].Price == 5000);
Kesalahannya:
Kesalahan CS8072 Pohon ekspresi lambda mungkin tidak berisi operator menyebarkan null.
C # Dapat dengan mudah menerjemahkan kode di atas ke kode ke kode berikut jika benar-benar tidak dapat melakukan hal lain!
var cnt = humans.AsQueryable().Count(a => a.House != null && a.House[0].Price == 5000);
Saya penasaran mengapa C # tidak melakukan apa-apa dan hanya menampilkan kesalahan kompiler?
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)"};
daripada harus menulis ProductName = (p == null) ? "(No products)" : p.ProductName
karena EF saat ini tidak mendukung ?.
operator.
Foo?.Bar
tidak sama denganFoo != null ? Foo.Bar : null
karenaFoo
dievaluasi sekali dengan operator penyebar null, dan dua kali dengan kondisional, sehingga terjemahan tidak akan benar di semua kasus.