Мне нужно создать дерево выражений, которое просто возвращает полученный параметр.e => e в дереве выражений
Это лямбда, которая мне нужна e => e перевести на дерево выражений.
Любые идеи?
Спасибо.
Мне нужно создать дерево выражений, которое просто возвращает полученный параметр.e => e в дереве выражений
Это лямбда, которая мне нужна e => e перевести на дерево выражений.
Любые идеи?
Спасибо.
Это будет делать это:
var param = Expression.Parameter(typeof(int), "e");
var body = param;
var lambda = Expression.Lambda<Func<int, int>>(body, param);
Вывод lambda.ToString()
:
e => e
Обратите внимание, что вам нужно, чтобы дать e
тип (в данном случае это целое число).
Что вы написали (e => e
) на самом деле уже дерево выражения (если они определены как Expression<T>
, то есть). Однако, скорее всего, вы хотите использовать заводские методы для построения дерева.
Спасибо, что это именно то, что я хочу :) – Zuryx
@ Zuryx Не стоит беспокоиться :) – Rob
Роб, я переписал вопрос, вставив несколько слов в рот @ Zuryx - посмотрим, согласны ли они и, возможно, согласны с вопросом (я действительно не думаю " 'e => e' уже выражение" обсуждение является конструктивным). –
e => e
. Вот и все.
Нужно набирать его, конечно, так, например, Expression<Func<int, int>> intTree = e => e;
для ints, Expression<Func<string, string>> stringTree = e => e;
для строк и т. Д.
Теперь у вас есть дерево с лямбда, вы можете проверить его или делать все, что вы хотите дерево для:
Console.WriteLine(intTree.Parameters[0].Name); // "e"
Console.WriteLine(intTree.CanReduce); // false
Func<int, int> intIdentityFunction = intTree.Compile();
код, который вы размещены уже делает это. Поздравляю, все готово. – Servy
Я должен использовать дерево выражений. Я знаю, что это выражение лямбда, которое генерирует то, что я хочу. – Zuryx
Да, но код, который вы даете, может быть способом написания дерева выражений в C# (тот же код также может писать делегат или тело метода, в зависимости от контекста) –