lamda表达式学习
lamda表达式
“Lambda 表达式”是一个匿名函数,它可以包含表达式和语句,并且可用于创建委托或表达式目录树类型。
格式:( 形参列表 ) => { 函数体 }
所有 Lambda 表达式都使用 Lambda 运算符 =>,该运算符读为“goes to”。该 Lambda 运算符的左边是输入参数(如果有),右边包含表达式或语句块。Lambda 表达式 x => x * x 读作“x goes to x times x”。可以将此表达式分配给委托类型
委托这些概念是.NET高级编程中的,当一个程序员经过一个阶段的学习之后,想要有一个提高,这时候学习这些概念就是必须的了,所以在讲Lamda表达式时,把这委托,匿名委托(匿名方法),Lamda表达式这几个概念整理了一下。
网上这方面的例子很多,但是对于起步阶段的人来说,这些例子显的晦涩了,所以我举得例子中,为了更清楚的说明这三者的关系,将淡化其内部实现的功能。
首先讲委托,在.NET中,委托这个概念有点类似于C/C++中的函数指针,但与指针不同的是,委托是一种安全的类型,那么我们就以实现两个数的差值为例,首先声明返回值为int的一个成员方法:
public int CompareTwoValue(int a, int b)
{
int c=a-b;
return c;
}
接着声明一个委托:
public delegate int deleMethod(int a,int b);
然后,我们可以通过这个委托调用这个上面的成员方法,
public int Show()
{
deleMethod d1 = new deleMethod(CompareTwoValue);
return d1(5,10);
}
那么,关于委托的概念,我就讲到这里,接着说明一下,匿名委托,其实也称作匿名方法,其实,这只是一种语法形式上的变化,因为编译的时候,还是要进行类型匹配的,那么对于上面的Show方法,我可以使用匿名委托的方式来表达
public int Show1()
{
deleMethod d2 = delegate(int a, int b)
{
int c=a-b;
return c;
};
return d2(5,10);
}
可以看出,语法形式上简便了,所以我个人觉得匿名委托在C#2.0中并没有实质性的用处,因为到3.0时,涉及到Lamda表达式时,才真正的有用处,那么上面的方法,如果用Lamda表达式表述如下:
public int Show2()
{
Func<int, int, int> f = ( a,b) =>
{
return a - b;
};
return f(5,10);
}
初次接触Lamda表达式时感觉很难懂,但是一旦理解了之后,我就很喜欢这种表达方式,其实,Lamda表达式只是匿名委托的一种表现形式,从上面的结果可以很直观的看出,三种方式中,Lamda表达式编写的代码量最少,最后看一下执行的结果
TestExample test = new TestExample();
Console.WriteLine(test.Show());
Console.WriteLine(test.Show1());
Console.WriteLine(test.Show2());
结果是一致的,其实三者的功能是一致的,只是表现形式不一样,而三种方法中,Lamda表达式编写的代码量最少。
原文地址:http://yangwenju1987.blog.163.com/blog/static/3126162920112462551125/
lamda表达式学习的更多相关文章
- Lamda表达式学习笔记二
Lamda表达式学习笔记二 lamda表达式----方法引用 上一篇讲到Lamda体就是对函数式接口方法的实现 ,在方法体中我们可能会引用其他方法实现逻辑,所以在lamda体中我们可以直接引用器方法 ...
- Lamda表达式学习笔记一
Lamda表达式学习笔记一 一.Lamda语法诠释 三傻大闹宝莱坞的主人公兰彻说的一句话让我映像深刻:用简单的语言来表达同样的意 我并不是说书上的定义怎么怎么不对,而是应该理解书本上的定义,并用简单的 ...
- [.net 面向对象程序设计进阶] (5) Lamda表达式(一) 创建委托
[.net 面向对象程序设计进阶] (5) Lamda表达式(一) 创建委托 本节导读: 通过学习Lambda表达式,学会创建委托和表达式目录树,深入了解Lambda的特性,让你的代码变的更加清晰. ...
- [.net 面向对象程序设计进阶] (6) Lamda表达式(二) 表达式树快速入门
[.net 面向对象程序设计进阶] (6) Lamda表达式(二) 表达式树快速入门 本节导读: 认识表达式树(Expression Tree),学习使用Lambda创建表达式树,解析表达式树. 学习 ...
- [.net 面向对象程序设计进阶] (7) Lamda表达式(三) 表达式树高级应用
[.net 面向对象程序设计进阶] (7) Lamda表达式(三) 表达式树高级应用 本节导读:讨论了表达式树的定义和解析之后,我们知道了表达式树就是并非可执行代码,而是将表达式对象化后的数据结构.是 ...
- python 内置函数 lamda表达式。 open 文件方法
lamda 表达式 lambda表达式 学习条件运算时,对于简单的 if else 语句,可以使用三元运算来表示,即: 普通的条件语句 if 1 == 1: name = 'kaixin' else: ...
- jdk8系列一、jdk8 Lamda表达式语法、接口的默认方法和静态方法、supplier用法
一.简介 毫无疑问,Java 8是Java自Java 5(发布于2004年)之后的最重要的版本.这个版本包含语言.编译器.库.工具和JVM等方面的十多个新特性. 在本文中我们将学习这些新特性,并用实际 ...
- java8-详解Lamda表达式
一回顾与说明 通过之前发布的"Java8Lamda和Stream原理引入"一文章中你已经了解了为什么会有Lamda表达式的由来,Lamda表达式的基本语法等:Lamda表达 ...
- 解读ASP.NET 5 & MVC6系列(12):基于Lamda表达式的强类型Routing实现
前面的深入理解Routing章节,我们讲到了在MVC中,除了使用默认的ASP.NET 5的路由注册方式,还可以使用基于Attribute的特性(Route和HttpXXX系列方法)来定义.本章,我们将 ...
随机推荐
- (zz)linux awk
博文转载自http://www.cnblogs.com/ggjucheng/archive/2013/01/13/2858470.html 谢谢原作者.条理很清楚,由浅入深.敲了每一行命令,正确无误. ...
- SQL Server编程(04)基本语法【转载】
一.定义变量 --简单赋值 declare @a int set @a=5 print @a --使用select语句赋值 declare @user1 nvarchar(50) select @ ...
- swoole 安装
swoole 安装: 1. 下载源代码,我下载的是1.8.6版本wget https://github.com/swoole/swoole-src/archive/1.8.6-stable.tar.g ...
- 《Java数据结构与算法》笔记-CH4-1栈的实现
class StackX{ private int maxSize; private long[] stackArray; private int top; public StackX(int siz ...
- asp.net 发送邮件代码 System.Net.Mail
前台页面 SendEmail.aspx 代码 using System.Net.Mail;using System.Net; <h2> 发送电子邮件演示 </h2> <t ...
- 【转】使用sinopia五步快速完成本地npm搭建
使用sinopia五步快速完成本地npm搭建 时间 2016-03-01 14:55:30 繁星UED 原文 http://ued.fanxing.com/shi-yong-sinopiawu-b ...
- Javascript里的if判断与逻辑运算符(||, &&)和比较运算符的特别之处
写JS时不可避免要用到 if 与 逻辑运算符( ||, &&). 如果你经常阅读Js的第三方组件源码, 会发现有一种写法作为初始化变量的方法经常出现. var variable = v ...
- oracle和mysql分页
mysql分页 关键字limit,limit m,n 其中m表示起始位置的下标,下标从0开始.n表示要显示的条数,比如要查询一个表的第2到5条数据. ,; oracle分页 关键字rownum, ro ...
- ios用户登录记住密码
登录 记录已登录用户步骤,存入偏好设置中存储放入一个数组. 具体存储 :存储用户到偏好设置中,其中用户是一个数组 向服务器响应客户端后的一些操作 (如果响应数据成功)其中用户和密码是一一对应的 .1先 ...
- 关于WebSocket长链接的详细介绍iOS
http://www.cocoachina.com/ios/20181030/25327.html