【发布时间】:2017-05-07 02:30:46
【问题描述】:
这是我第一次探索表达式树。我有几个基本的疑问。
所以本质上,一个表达式只需要一个 lambda 表达式。 Ans 然后我们可以 Compile() 将 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 expression body 。现在要将其转换为full lambda expression,我们需要调用
Console.WriteLine(Expression.Lambda<Func<int, int>>(b4).Compile());
我没有得到这部分。这也不起作用。
为什么是Func<int,int>?
是不是内部表达式只接受 int 作为参数,而整个表达式将返回一个 int?
显然这不起作用。生成的 lambda 看起来如何?
我得到了整个画面?如何使这项工作?
【问题讨论】:
-
这也不起作用。,它有什么作用?它会给你一个错误吗?什么错误?
标签: c# .net lambda code-generation expression-trees