Добрый день.
Имеется задача - в рантайме создать на основе данного лямбда-выражения другое. Но по условиям задачи на выходе получается лямбда из нескольких выражений - т.е. лямбда-оператор. Expression Tree, которые можно использовать с лямбда-выражениями, нельзя использовать с лямбда-операторами.
Можно ли это как-нибудь решить или подскажите, куда копать?
Было бы неплохо, если бы ты конкретнее обрисовал задачу, что именно требуется и почему Expression Tree не подходят. Вместо использования очевидных (только тебе) тебе термов «лямбда-оператор» и «лямбда-выражение». С примерами кода. Потому что, насколько мне известно, лямбда-оператор это оператор языка, которым помечается область кода, как лямбда-выражение, в C# он имеет вид => (и гугл со мной согласен). Тогда всё ставится совсем-совсем не ясно и откровенно не очевидно. Покажи код.
Namynnuz,
Задача такая - на входе произвольная лямбда, мне нужно изменить её определённым образом(оптимизировать). Я думал, что Expression Tree не может создавать лямбды из нескольких выражений e => {var a=...;var b=...; return r;}. Теперь нашел информацию о BlockExpression, если я правильно понимаю, его помощью можно сделать лямбду из нескольких выражений. Сейчас проблема стоит в том, как работать с произвольными лямбдами.
Alexeytur, Просто. Покажи. Код. Не buzzwords, а зачем и почему. Если это какая-то универская задача или для собеседования что-то, и там стоит условие — обязательное использование лямбд, тогда понятно. Иначе т.н. лямбды как таковые тебе, возможно, вообще не нужны, от слова совсем. Лямбды в C# — это просто (анонимные) методы, чтобы сократить оверхэд по коду во многих местах (без необходимости явно указывать сигнатуру делегата). И воспринимать их надо как методы, и работать с ними тоже надо соответственно. В каком виде тебе приходит метод? В виде делегата? Текста? AST? Подключен Roslyn или какое-то собственное поделие? Что подразумевается под оптимизацией? Так в чём состоит задача? И почему именно лямбды? Что с ними нужно сделать? И зачем? В правильно заданном вопросе содержится половина решения. Пока ты сам не понимаешь, что тебе нужно. Разберись.
Namynnuz,
Это тестовое задание, его просили не распространять, поэтому я не могу его написать. По заданию, нужно преобразовать произвольное лямбда-выражение определённым образом. Наверное, мне что-то не досказали?