Я часто використовую в своєму коді оператор поширення нуля, оскільки він дає мені більше читабельного коду, особливо в довгих запитах, я не повинен перевіряти нуль кожного класу, який використовується.
У наведеному нижче коді виникає помилка компіляції, що ми не можемо використовувати оператор поширення нуля в лямбда.
var cnt = humans.AsQueryable().Count(a => a.House?[0].Price == 5000);
Помилка:
Помилка CS8072 Лямбда дерева виразів не може містити оператора, що поширює нуль.
C # Можна легко перевести вищевказаний код у наступний код, якщо насправді нічого іншого зробити не можна!
var cnt = humans.AsQueryable().Count(a => a.House != null && a.House[0].Price == 5000);
Мені цікаво, чому C # нічого не робить і просто кидає помилку компілятора?
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)"};
замість того, щоб писати, ProductName = (p == null) ? "(No products)" : p.ProductName
оскільки EF зараз не підтримує ?.
оператора.
Foo?.Bar
не еквівалентноFoo != null ? Foo.Bar : null
томуFoo
, що обчислюється один раз за допомогою оператора, що поширює нуль, і двічі за допомогою умовного, тому переклад не буде правильним у всіх випадках.