目录
Lambda表达式/表达式目录树
- 在C#里面表达式有Lambda表达式和表达式目录树。
- Lambda表达式是一个匿名函数,其本质上就是一个方法,匿名方法。
- 在匿名方法的基础上,进一步简化了创建委托实例所需要的代码。
- 但是匿名函数不等于匿名方法,匿名函数包含了匿名方法和Lambda表达式两种概念。
- 匿名方法只能转换为委托。
- Lambda作为表达式,可以被C#编译器转换为委托,也可以被编译器转换为表达式。
- 作为委托和表达式目录树,两者在IL阶段的表示是不一样的。
- 作为委托的IL,在运行期间能被CLR直接执行。
- 作为表达式目录树,在运行期间不能被CLR直接执行,而是通过相应的Provider转换为所需要的东西, 比如在EFCore中将Expression类型转换为SQL。
- 另外在委托或者事件上执行+=/-=的时候用拉姆达表达式不能移除,因为生成的方法不是同一个方法。
Expression
- 表达式目录树是一种数据结构,是一个类的封装,用树形的数据结构来表示具体的代码。
- 描述了多个变量或者常量之间的关系,并且按照一定的规则进行组装。
- 可以像委托一样使用拉姆达表达式来快捷声明。
- 但是不能有语句块,声明时只能有一行代码。
- 可以通过Compile函数,编译成一个委托。