Как правило, при использовании условного оператора здесь синтаксис:
int x = 6;
int y = x == 6 ? 5 : 9;
Ничего необычного, довольно прямолинейного.
Теперь попробуйте использовать это при назначении Lambda для типа Func. Позвольте мне объяснить:
Func<Order, bool> predicate = id == null
? p => p.EmployeeID == null
: p => p.EmployeeID == id;
Тот же синтаксис, и должен работать? Правильно? По какой-то причине это не так. Компилятор дает это приятное загадочное сообщение:
Ошибка 1 Тип условного выражения не может быть определен, потому что не существует неявного преобразования между "лямбда-выражением" и "лямбда-выражением"
Затем я пошел дальше и изменил синтаксис, и таким образом он работал:
Func<Order, bool> predicate = id == null
? predicate = p => p.EmployeeID == null
: predicate = p => p.EmployeeID == id;
Мне просто интересно, почему это не работает первым способом?
(Боковое замечание: мне не нужен этот код, так как я выяснил, что при сравнении значения int против null вы просто используете object.Equals)