Lambda表达式和Lambda表达式树

时间:2021-10-12 20:19:48

 •Lambda表达式概念

Lambda 表达式”是一个匿名函数,它可以包含表达式和语句,并且可用于创建委托或表达式目录树类型。
Lambda表达式是对.NET2.0中匿名方法在语法形式上的进一步改进
 var inString = list.FindAll(delegate(string s) { return s.Indexof("YJingLee") >= 0; });
使用Lambda表达式代码将更自然易懂
 var inString = list.FindAll(s => s.Indexof("YJingLee") >= 0);
语法:Lambda表达式格式为:(参数列表)=>表达式或语句块
Lambda 表达式和 匿名方法其实是一件事情。他们的作用都是:产生方法。即内联方法。
Lambda 表达式式范例:
string[] list = new string[] { “abc
”, “12”, “java” }; 
string[] 
alist = Array.FindAll(lists => (s.IndexOf
(“a”) >= 0)); 
 //x
的类型省略了,编译器可以根据上下文推断出来,后面跟着的是表达式
x => x+1
deleage(int
x){return x+1;}
//
后面跟着的是语句块
x=>{return x+1;}
delegate(
int
x){return x+1;}
//
输入参数也可以带类型,带类型后别忘记小括号
(int
x) => x+1
delegate(
int
x){return x+1;}
//
也可以多个输入参数,逗号分隔,别忘记小括号
(x,y) => x+y

delegate(
int x,int y){return x+y ;}
//
无参的也行
() => 1

delegate(){return 1;}
Lambda 表达式树概念
 
Expressions Tree 概念
表达式树又称为表达式目录树,以数据形式表示语言级代码。所有的数据都存储在树结构中,每个结点表示一个表达式(Expression)
Lambda表达式树允许我们像处理数据(比如读取,修改)一样来处理Lambda表达式。
表达式的种类
参数表达式:meterExpression,就是一个方法中的参数,例如search(string key),key可以看成是一个参数表达式。
二元表达式:BinaryExpression,例如a+b等。
方法调用表达式:MethodCallExpression例如:自定义LINQ提供程序中实现orderby 的操作
常数表达式:ConstantExpression例如数值5
字段或属性表达式:MrExpression例如str.LengthExpression.Property(pe,typeof(string).GetProperty("Length"));
带有条件运算的表达式:ConditionalExpression
描述lambda表达式:LambdaExpression
一元运算符的表达式:UnaryExpression
表达式和类型之间的相关操作:TypeBinaryExpression等等,它们都继承Expression
C# Lambda表达式树要点
Lambda表达式的参数类型可以忽略,因为可以根据使用的上下文进行推断。
Lambda表达式的主体(body)可以是表达式,也可以是语句块。
Lambda表达式传入的实参将参与类型推断,以及方法重载辨析。
Lambda表达式和表达式体可以被转换为表达式树。
表达式树允许lambda表达式能够代表数据结构替代表示为执行代码。