2016-03-29 2 views
-1

Мне нужно создать дерево выражений, которое просто возвращает полученный параметр.e => e в дереве выражений

Это лямбда, которая мне нужна e => e перевести на дерево выражений.

Любые идеи?

Спасибо.

+4

код, который вы размещены уже делает это. Поздравляю, все готово. – Servy

+0

Я должен использовать дерево выражений. Я знаю, что это выражение лямбда, которое генерирует то, что я хочу. – Zuryx

+2

Да, но код, который вы даете, может быть способом написания дерева выражений в C# (тот же код также может писать делегат или тело метода, в зависимости от контекста) –

ответ

3

Это будет делать это:

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>, то есть). Однако, скорее всего, вы хотите использовать заводские методы для построения дерева.

+0

Спасибо, что это именно то, что я хочу :) – Zuryx

+0

@ Zuryx Не стоит беспокоиться :) – Rob

+0

Роб, я переписал вопрос, вставив несколько слов в рот @ Zuryx - посмотрим, согласны ли они и, возможно, согласны с вопросом (я действительно не думаю " 'e => e' уже выражение" обсуждение является конструктивным). –

1

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(); 
Смежные вопросы