C# 在运行时将标识(e=>;e)构造为表达式树

C# 在运行时将标识(e=>;e)构造为表达式树,c#,asp.net,linq,expression-trees,C#,Asp.net,Linq,Expression Trees,我需要在运行时创建标识表达式树,该树只返回它接收到的参数 在编译时,我可以使用lambdae=>e作为表达式树,但我需要在运行时进行转换。我正在寻找类似于MSDN文章中如何构造num=>nume)实际上已经是一个表达式树(如果定义为表达式,也就是说)。但是,您可能希望使用工厂方法来构建树。这样做: var param = Expression.Parameter(typeof(int), "e"); var body = param; var lambda = Expression.Lambda

我需要在运行时创建标识表达式树,该树只返回它接收到的参数

在编译时,我可以使用lambda
e=>e
作为表达式树,但我需要在运行时进行转换。我正在寻找类似于MSDN文章中如何构造
num=>num<5
表达式树的代码。

这样做:

var param = Expression.Parameter(typeof(int), "e");
var body = param;
var lambda = Expression.Lambda<Func<int, int>>(body, param);
注意,您需要给
e
一个类型(在本例中是int)


预编辑注释:

您编写的(
e=>e
)实际上已经是一个表达式树(如果定义为
表达式,也就是说)。但是,您可能希望使用工厂方法来构建树。

这样做:

var param = Expression.Parameter(typeof(int), "e");
var body = param;
var lambda = Expression.Lambda<Func<int, int>>(body, param);
注意,您需要给
e
一个类型(在本例中是int)


预编辑注释:


您编写的(
e=>e
)实际上已经是一个表达式树(如果定义为
表达式,也就是说)。但是,您可能希望使用工厂方法来构建树。

e=>e
。就这样

当然,它需要键入,例如
Expression intTree=e=>e对于整数,
表达式stringTree=e=>e用于字符串,等等

现在,您已经从lambda中获得了树,您可以检查它,或者执行任何您想要该树的操作:

Console.WriteLine(intTree.Parameters[0].Name); // "e"
Console.WriteLine(intTree.CanReduce); // false
Func<int, int> intIdentityFunction = intTree.Compile();
Console.WriteLine(intTree.Parameters[0].Name);//“e”
Console.WriteLine(intTree.CanReduce);//假的
Func intIdentityFunction=intTree.Compile();

e=>e
。就这样

当然,它需要键入,例如
Expression intTree=e=>e对于整数,
表达式stringTree=e=>e用于字符串,等等

现在,您已经从lambda中获得了树,您可以检查它,或者执行任何您想要该树的操作:

Console.WriteLine(intTree.Parameters[0].Name); // "e"
Console.WriteLine(intTree.CanReduce); // false
Func<int, int> intIdentityFunction = intTree.Compile();
Console.WriteLine(intTree.Parameters[0].Name);//“e”
Console.WriteLine(intTree.CanReduce);//假的
Func intIdentityFunction=intTree.Compile();