我第一次探索表达式树,有一些基本疑问。
本质上,一个表达式只需要一个lambda表达式。然后我们可以将lambda表达式编译为MSIL代码,进而返回一个通用的委托。我们可以直接调用返回的委托。我的理解是正确的吗?
如果是这样,这就是我想要实现的:((10*5)+(9/4))
BinaryExpression b1 = Expression.MakeBinary(ExpressionType.Multiply, Expression.Constant(10), Expression.Constant(5));//(10*5)
BinaryExpression b2 = Expression.MakeBinary(ExpressionType.Divide, Expression.Constant(9), Expression.Constant(4));//(9/4)
BinaryExpression b4 = Expression.MakeBinary(ExpressionType.Add, b1, b2);//((10*5)+(9/4))
所以现在我们已经创建了 lambda表达式体
。 现在要将其转换为完整的lambda表达式
,我们需要调用
Console.WriteLine(Expression.Lambda<Func<int, int>>(b4).Compile());
我不理解这部分。而且这也行不通。
为什么要用 Func<int,int>
?
是因为内部表达式只接受 int 参数,而整个表达式返回一个 int 吗?
显然这样行不通。生成的 lambda 长什么样子?
我没有完全理解吗?怎样使其可行?