Я думаю, что ваш вопрос:
Почему Expression.Lambda
не может проверить все тело выражения для
выражения параметров, а затем использовать их в качестве параметров выражения, избавляя меня от проблемы необходимости явной передачи их снова в вызове Lambda
?
Ну, конечно, может, но как узнать, в каком порядке принять эти параметры в общем случае?
В вашем примере, как узнать, генерировать ли выражение, эквивалентное:
(x, y) => x.StartsWith(y)
(или)
(y, x) => x.StartsWith(y)?
Должен ли ваш lambda.Compile()("42", "4")
вернуть true
или false
?
Он не может принимать эти решения от вашего имени в общем случае.