我试图了解是否理解表达式树并且可以生成一些其他支持的运算符。我不明白为什么我不能将plusEqual文字用作函数并将值传递给它。当我取消评论时,我收到一条错误消息。该错误表示"方法名称预期"。我对这段代码的理解是plusEquals是一个变量,它指向一个可执行代码。我确实看到我可能正在回答部分问题,但我的问题是为什么会发生这种情况,这与我在Exprssion Tree basics等一些教程网站上看到的情况相反。查理在这里`int c = function(3,5); 我在下面的代码中遵循创建plusEquals的确切步骤。如你所见,一旦我编译()表达式,我得到我想要的结果。 这是我的代码:
using System;
using System.Linq.Expressions;
namespace myExpressionTree
{
class Program
{
static void Main(string[] args)
{
Expression<Func<int, int, int>> expression = (a, b) => a + b;
Console.WriteLine(expression);
Expression<Func<int, bool>> lessThan = i => i < 5;
Console.WriteLine(lessThan);
Console.WriteLine("result of expression of i < 5 = {0}", lessThan);
Expression<Func<int, int>> plusEquals = a => +a;
Console.WriteLine(plusEquals);
//Int32 c = plusEquals(3);
int c = plusEquals.Compile()(3);
Console.WriteLine("Here is result of plusEquals expression on c {0}",c);
Console.ReadLine();
}
}
}
` 另一个有趣的点或相当不同的是ExpressionVisualizer中为plusEquals显示的节点类型是lambda而不是它们的类成员名称,例如Expression,LessThan和Expression中的其他名称。
更新;好的,谢谢你。我遇到的一个突出问题是,如果add表达式的nodetype在ExpressionVisualizer中显示为Add,那么lessThan和+ =运算符nodetypes会被标记为lambda?
答案 0 :(得分:1)
Expression
只是代码结构的表示,要执行Expression
,你必须先编译它。
查看您在问题中发布的link中的Compiling an Expression: Converting Data back into Code
部分。