C# 在运行时将标识(e=>;e)构造为表达式树
我需要在运行时创建标识表达式树,该树只返回它接收到的参数 在编译时,我可以使用lambdaC# 在运行时将标识(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
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();