我读过几篇文章和几篇stackoverflow.com关于表达式树的帖子。
我的大脑很难理解。
问题:
1)像DOM(文档对象模型)一样,它是逻辑的内存表示?
2)有人解释说它是一种将可执行代码转换为数据的机制,使用它我们可以生成表示代码的数据结构。
这是否意味着表达式树用于设计用户定义的模式?
3)大多数示例显示表达式树与Func<>
委托或其他委托,因此使用委托和其他编程构造我们不能实现与表达式树服务相同的事情。
表达式树表示单个表达式的语法树。
树的每个节点代表一些常量、对象成员引用或操作。
例如。用于表达2 + 3
我们可以构建表达式树:
Expression.MakeBinary(
ExpressionType.Add,
Expression.Constant(2),
Expression.Constant(3));
此类树中最重要的是 Expression,它允许以良好可读的形式编写表达式,提醒 lambda 函数与 TDelegate 的签名匹配。这里是前任
Expression<Func<int>> sum = () => 2 + 3; // much nicer, eh?
但Expression不是委托,因为它不能直接执行。
相反,它可以被遍历,例如使用访问者对象来构建一些可执行表示。示例可以是使用 Expression.Compile() 进行委托构建,或者使用 CompiledQuery.Compile() 等从 LINQ 查询构建 SQL 查询。
表达式树的另一个有用的应用是使用它们来表示对象的成员,否则需要使用反射。反射使用字符串来表示成员名称,并且在编译时不进行检查。检查表达式树,因此可以减少一些错误。
PropertyInfo prop1 = typeof(MyClass).GetProperty("Value");
Expression<Func<MyClass, int>> expr = mc => mc.Value;
PropertyInfo prop2 = (mc.Body as MemberExpression).Member as PropertyInfo;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)