C# 表达式树的重要意义

linq就是表达式树的最重要价值的体现

因为 可以通过 lambda表达式,直接转换为 expression tree所以,通过linq 所构造 的连式lambda就可以构造任意复杂的算法数据结构

而对这个算法数据结构的,解析,和翻译将可以帮助 实现 跨语言的算法 平移,比如 linq to sql这一类的应用,

可以把算法做为存储结构固定下来,这样我们可以把算法保存在Expression里面,比如存入数据库,提取出来在不同的平台不同的语言都

可以使用,只要采取相应的解析翻译算法就可以了

经过对它的一段时间学习,我了解到一个重要的容易混淆的地方

Expression 不是表达式树,表达式树的转化主要是针对一句话或一句话之类的事情 所做的,对一句C# 转换为一个树结构数据

而Expression的所有派生类,和由它的表达方法所进行的编程不是表达式树的编程,而是面向比C#更底一层的指令接口的编程,我猜测就是

面向IL 的编程因为C#编译后 就成为IL代码,当然现在可能更优化aot之类,可能将一部分编译成二进制,更具性能,这方面具体我没研究过

总之Expression 非常类型Emit Emit就是直接 使用IL指令进行编程,它的最主要用途就是编译一个动态方法 ,恰好Expression 的主要作用

也是如此 ,可以把Expression编程看作是对Emit的一个简单的基于oo的封装,它们直接针对的更低层语言(IL)的接口,比如 Expression里面

没有while,for foreach,等种种循环,就是一个Expression.Loop(...) 就完了,类似还有Block 这个也有传入传出,和方法相似,但没有C#里面具体 的方法的概念,特别把这些容易 混淆的知识点整理一下,以作备忘。

原文地址:https://www.cnblogs.com/ProjectDD/p/10921156.html