C# Lambda Expression概念浅析
来源:互联网 发布:淘宝商城软包 编辑:程序博客网 时间:2024/05/21 21:35
C# Lambda Expressions是什么呢?我们在处理数据库数据删除的操作的时候会碰到它,那么具体的C# Lambda Expressions是什么以及含义和使用是什么情况呢?那么下面我来看看具体的内容。
1.关于C# Lambda Expressions:
一个Lambda Expression (译为Lambda式) 就是一个包含若干表达式和语句的匿名函数。可以被用作创建委托对象或表达式树类型。所有的Lambda式都使用操作符“=>“,表示“goes to (转变为)”。操作符左边部分是输入参数表,右边部分是表达式或语句块。x => x * x 读成“x转变为x 乘x”。Lambda式可以被赋值给一个委托类型:
C# Lambda实例1: delegateintdel(inti); [/ol]
也可以被用于创建一个表达式树类型:
C# Lambda实例2: usingSystem.Linq.Expressions; [/ol]
操作符“=>”具有和“=”一样的运算优先级,且为右相关(右边先执行)。
在例1中,我们注意到委托的定义中有一个int类型的输入参数以及int类型的返回值。例子中的Lambda式中并没有任何类型的声明。是编译器为我们做了相应的隐式数据类型转换:输入参数类型能够从委托的输入参数类型隐式转换,返回类型能够被隐式转换为委托的返回类型。
Lambda式不允许作为“is”和“as”操作符的左操作数出现。也就是 delmyDelegate=x=>x*xasstring;//error[/ol]
所有对于匿名方法的约束也同样适用于Lambda式。请参阅Anonymous Methods (C# Programming Guide).
2.从表达式理解C# Lambda Expressions
由一个计算表达式组成的一个Lambda式称之为表达式Lambda。表达式Lambda常被用于构造表达式树。一个表达式Lambda返回计算表达式运算的结果。基本结构如下: (inputparameters)=>expression [/ol]
上面这段代码在Lambda式中调用了一个方法。需要注意的是,如果在创建会被其他方使用的表达式树的时候,不宜在Lambda式中执行方法调用。比如:在SQL Server内执行。
一般来说,让一个方法在原先设计的上下文环境以外执行没有意义,也不能真正工作。
3.从语句理解C# Lambda Expressions
语句Lambda和表达式Lambda非常相似,只是语句被包含在大括号内: (inputparameters)=>{statement;}[/ol]
大括号中的语句可以是任意多条,也可以写成多行(定义一个Lambda式也就是在定义一个匿名方法): TestDelegatemyDel=n=>{strings=n+""+"World"; [/ol]
当然语句Lambda跟匿名方法一样,无法用于创建表达式树。
4.C# Lambda Expressions之类型猜测
当编写一个Lambda式的时候,我们通常不需要明确指定输入参数的类型。因为编译器会根据Lambda体的实现,以及委托的定义来猜测类型。
举例:如果要从一个List中删除小于100的元素 lst.RemoveAll(i=>i
通常的猜测规则如下:
◆Lambda式必须包含与委托定义中相等数量的输入参数;
◆每个Lambda式的输入参数必须能够隐式转换成委托定义中所要求的输入参数;
◆Lambda式的返回值必须能够隐式转换成委托定义中的返回值。
注意:由于目前在common type system中还没有一个“Lambda式类型”的类型。如果在有些场合提到“Lambda式的类型”,那通常表示委托的定义或者是Expression类型。
5.C# Lambda Expressions变量作用域
在Lambda式定义中可以引用外部变量。只要是在定义处能够访问到的变量,都可以在Lambda式中引用。
Lambda式的定义仅仅是定义一个匿名方法,最终会生成一个委托对象。外部变量的引用将被“捕获”到委托对象内部,将会伴随委托对象的整个生命周期。在委托对象生命周期结束之前该变量都不会被垃圾回收。就算外部变量已经超过了原来的作用域,也还能继续在Lambda式中使用。所有会被引用的外部变量必须在Lambda式定义之前被显式赋值。见下例 delegateboolD(); [/ol]
下面是关于变量作用域的规则:
◆被“捕获”的变量在委托的生命周期结束前都不会被垃圾回收;
◆在Lambda式内部定义的变量对外不可见;
◆Lambda式无法直接捕获一个具有ref或out描述的参数变量;
◆Lambda式中的return语句不会导致当前所在的方法返回;
◆Lambda式中不允许包含会导致跳当前执行范围的goto,break 或 continue语句。
6.C# Lambda Expressions学习的总结
Lambda式可以说就是另外一种形式的匿名方法。用在某些地方,会使代码更加简洁。定义一个Lambda式本质上就是定义一个委托的实现体。
原文来自博客园:http://www.cnblogs.com/smwikipedia/archive/2009/05/06/1450825.html
C# Lambda Expressions的相关内容就向你介绍到这里,希望对你了解和学习掌握C# Lambda Expressions有所帮助,之后我们会继续学习C# Lambda Expressions的一些应用。
1.关于C# Lambda Expressions:
一个Lambda Expression (译为Lambda式) 就是一个包含若干表达式和语句的匿名函数。可以被用作创建委托对象或表达式树类型。所有的Lambda式都使用操作符“=>“,表示“goes to (转变为)”。操作符左边部分是输入参数表,右边部分是表达式或语句块。x => x * x 读成“x转变为x 乘x”。Lambda式可以被赋值给一个委托类型:
C# Lambda实例1: delegateintdel(inti); [/ol]
也可以被用于创建一个表达式树类型:
C# Lambda实例2: usingSystem.Linq.Expressions; [/ol]
操作符“=>”具有和“=”一样的运算优先级,且为右相关(右边先执行)。
在例1中,我们注意到委托的定义中有一个int类型的输入参数以及int类型的返回值。例子中的Lambda式中并没有任何类型的声明。是编译器为我们做了相应的隐式数据类型转换:输入参数类型能够从委托的输入参数类型隐式转换,返回类型能够被隐式转换为委托的返回类型。
Lambda式不允许作为“is”和“as”操作符的左操作数出现。也就是 delmyDelegate=x=>x*xasstring;//error[/ol]
所有对于匿名方法的约束也同样适用于Lambda式。请参阅Anonymous Methods (C# Programming Guide).
2.从表达式理解C# Lambda Expressions
由一个计算表达式组成的一个Lambda式称之为表达式Lambda。表达式Lambda常被用于构造表达式树。一个表达式Lambda返回计算表达式运算的结果。基本结构如下: (inputparameters)=>expression [/ol]
上面这段代码在Lambda式中调用了一个方法。需要注意的是,如果在创建会被其他方使用的表达式树的时候,不宜在Lambda式中执行方法调用。比如:在SQL Server内执行。
一般来说,让一个方法在原先设计的上下文环境以外执行没有意义,也不能真正工作。
3.从语句理解C# Lambda Expressions
语句Lambda和表达式Lambda非常相似,只是语句被包含在大括号内: (inputparameters)=>{statement;}[/ol]
大括号中的语句可以是任意多条,也可以写成多行(定义一个Lambda式也就是在定义一个匿名方法): TestDelegatemyDel=n=>{strings=n+""+"World"; [/ol]
当然语句Lambda跟匿名方法一样,无法用于创建表达式树。
4.C# Lambda Expressions之类型猜测
当编写一个Lambda式的时候,我们通常不需要明确指定输入参数的类型。因为编译器会根据Lambda体的实现,以及委托的定义来猜测类型。
举例:如果要从一个List中删除小于100的元素 lst.RemoveAll(i=>i
通常的猜测规则如下:
◆Lambda式必须包含与委托定义中相等数量的输入参数;
◆每个Lambda式的输入参数必须能够隐式转换成委托定义中所要求的输入参数;
◆Lambda式的返回值必须能够隐式转换成委托定义中的返回值。
注意:由于目前在common type system中还没有一个“Lambda式类型”的类型。如果在有些场合提到“Lambda式的类型”,那通常表示委托的定义或者是Expression类型。
5.C# Lambda Expressions变量作用域
在Lambda式定义中可以引用外部变量。只要是在定义处能够访问到的变量,都可以在Lambda式中引用。
Lambda式的定义仅仅是定义一个匿名方法,最终会生成一个委托对象。外部变量的引用将被“捕获”到委托对象内部,将会伴随委托对象的整个生命周期。在委托对象生命周期结束之前该变量都不会被垃圾回收。就算外部变量已经超过了原来的作用域,也还能继续在Lambda式中使用。所有会被引用的外部变量必须在Lambda式定义之前被显式赋值。见下例 delegateboolD(); [/ol]
下面是关于变量作用域的规则:
◆被“捕获”的变量在委托的生命周期结束前都不会被垃圾回收;
◆在Lambda式内部定义的变量对外不可见;
◆Lambda式无法直接捕获一个具有ref或out描述的参数变量;
◆Lambda式中的return语句不会导致当前所在的方法返回;
◆Lambda式中不允许包含会导致跳当前执行范围的goto,break 或 continue语句。
6.C# Lambda Expressions学习的总结
Lambda式可以说就是另外一种形式的匿名方法。用在某些地方,会使代码更加简洁。定义一个Lambda式本质上就是定义一个委托的实现体。
原文来自博客园:http://www.cnblogs.com/smwikipedia/archive/2009/05/06/1450825.html
C# Lambda Expressions的相关内容就向你介绍到这里,希望对你了解和学习掌握C# Lambda Expressions有所帮助,之后我们会继续学习C# Lambda Expressions的一些应用。
- C# Lambda Expression概念浅析
- C# Lambda Expression概念浅析
- c# lambda expression
- C# Delegate ,Anonymous methods,lambda expression
- 浅析C#中的Lambda表达式
- C#中lambda表达式浅析
- Lambda Expression
- C#利用Lambda和Expression实现数据的动态绑定
- Building OrderBy Lambda Expression from Property Name in C#
- c# Use a lambda expression to define an event handler
- 浅析Lambda
- some lambda expression
- USE lambda expression
- c++ 11 Lambda expression
- lambda expression demo
- copy_if() with lambda expression
- Lambda Expression In Java
- Java Lambda Expression
- String类方法汇总
- 解决Android不能访问你的adb
- Mounting images in Dom0 using the blktap2 driver
- g++ 多文件编译之“平级目录”(新手初识makefile)
- 第一篇 实与虚
- C# Lambda Expression概念浅析
- 建成第一个github项目
- android-简单widgetdemo
- Hibernate多条件查询方法收录
- C#-数据处理-流
- 浮点数的比较
- 呃,我的技术博客开通了~~~
- VC和Python的互相调用
- 单窗口程序