阐述Lambada表达式
在C#2.0引入匿名方法之前,声明委托的唯一方法就是使用命名方法,C#2.0之后的C#3.0中开始引入了Lambda表达式取代了匿名方法。
匿名方法
要说Lambda必然离不开匿名方法,实际上,Lambda的本质就是一个匿名方法,上代码
class Program
{ delegate void SayHello(string name); public static void Main(string[] args)
{
SayHello sh1 = HelloMethod; SayHello sh2 = delegate (string name)//匿名方法
{
Console.WriteLine("Hello:" + name);
}; sh1("jiming1");
sh2("jiming2"); Console.Read();
} public static void HelloMethod(string name)
{
Console.WriteLine("Hello:" + name);
}
}
上述代码中,首先定义了一个委托SayHello,注册到改委托的方法需要有一个string类型的参数,第一个委托对象sh1直接使用的是命名方法HelloMethod,第二个委托对象sh2使用的就是匿名方法.
Lambda表达式
lambda运算符:所有的lambda表达式都是用新的lambda运算符 " => ",可以叫他,“转到”或者 “成为”。运算符将表达式分为两部分,左边指定输入参数,右边是lambda的主体。参数的个数可以是0、1或多个,只有当输入参数是1个时,Lambda表达式左边的小阔海才可以省略
示例:
public static void Main(string[] args)
{
Action action = new Action(() => Console.WriteLine("0参数Lambda"));
action.Invoke(); Console.Read();
}
分析:上述代码中,他输入的参数是0,方法主体打印"0参数Lambda"
示例2:
public static void Main(string[] args)
{
Func<int,int> func = new Func<int,int>(m=>m*); Console.WriteLine(func.Invoke()); Console.Read();
}
上述Lambda表达式的输入参数省略了一对小括弧,它与“(m)=>m*2”Lambda表达式是等效的。这里还包含另外一个C#的语法糖,由于方法体中只有一句话,所以,可以省略{},甚至省略了return,实际上,上述代码的全部写法应该是:
public static void Main(string[] args)
{
Func<int, int> func = new Func<int, int>((m) =>{ return m * ; }); Console.WriteLine(func.Invoke()); Console.Read();
}
示例3:
public static void Main(string[] args)
{
Action<int, int> action = new Action<int, int>((m,n)=> {
int result = m * n;
Console.WriteLine(result);
}); action.Invoke(, ); Console.Read();
}
上述代码中左边是两个参数,m\n,方法体中是计算m*n的结果,然后打印出来,由于方法体中是多行,因此,不能省略{}
总结:
.(x, y) => x * y //多参数,隐式类型=> 表达式
.x => x * //单参数, 隐式类型=>表达式
.x => { return x * ; } //单参数,隐式类型=>语句块
.(int x) => x * //单参数,显式类型=>表达式
.(int x) => { return x * ; } //单参数,显式类型=>语句块
.() => Console.WriteLine() //无参数
使用Lambda表达式,可以方便快速的编写代码,一些不复用的方法完全可以使用Lambda表达式来写,这样既提高了代码的可读性,也减少了代码量提高可维护性。
同时Lambda右边方法体内的代码块能够访问Lambda所在方法提所定义的局部变量,这样能够较少参数的定义和传递。
public static void Main(string[] args)
{
string name = "jiming"; Func<int, int,int> func = new Func<int, int,int>((m,n)=> {
int result = m * n;
Console.WriteLine(result); Console.WriteLine(name); return result;
}); func.Invoke(, ); Console.Read();
}
如上述代码,name变量是定义在Main方法中的,如果不使用Lambda,使用命名方法的话,在命名方法中使用name我需要定义一个变量之后传递进入,而使用Lambda后很方便的就能够访问name变量了
阐述Lambada表达式的更多相关文章
- 2.cocos2dx 3.2中语法的不同之处,lambada表达式的使用和function和bind函数的使用
1 打开建好的T32 Cocos2dx-3.2的一个项目 2 设置Cocos显示窗口的位置是在AppDelegate.cpp中: 3 设置自适应窗口大小的代码是在上面的 ...
- lambada 表达式
1.lambada的存在来由 匿名类的一个问题是,如果匿名类的实现非常简单,例如只包含一个方法的接口,那么匿名类的语法可能看起来不实用且不清楚.在这些情况下,您通常会尝试将功能作为参数传递给另一个方法 ...
- lambada表达式
在Java 8中stream().map(),您可以将对象映射为其他对象. List<String> collect = alpha.stream().map(String::toUppe ...
- Lambada表达式的作用
Lambda函数的用处 假设你设计了一个地址簿的类.现在你要提供函数查询这个地址簿,可能根据姓名查询,可能根据地址查询,还有可能两者结合.要是你为这些情况都写个函数,那么你一定就跪了.所以你应该提 ...
- 2.cocos2dx 3.2在语法的差异,lambada使用表达式和function和bind使用功能
1 打开 - 内置T32 Cocos2dx-3.2一个专案 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdG90b3R1enVvcXVhb ...
- Lambda表达式的由来
1.lambada表达式的本质:一个匿名方法,或说是匿名委托.从C#3.0开始支持,C#2.0只支持匿名方法语法很简单 : (输入参数)=>expr //当参数为一个是可以省略括号.lamb ...
- 表达式目录树(Expression)
一:什么是表达式树 Expression我们称为是表达式树,是一种数据结构体,用于存储需要计算,运算的一种结构,这种结构可以只是存储,而不进行运算.通常表达式目录树是配合Lambda一起来使用的,la ...
- Java8新特性-Lambda表达式是什么?
目录 前言 匿名内部类 函数式接口 和 Lambda表达式语法 实现函数式接口并使用Lambda表达式: 所以Lambda表达式是什么? 实战应用 总结 前言 Java8新特性-Lambda表达式,好 ...
- 浅入浅出Lambda表达式
大家在开发中会经常看到也会经常使用lambda表达式. 园子里也有很多详解lambda表达式的文章,多是从横向来讲述. 但lambda表达式到底如何变成现在这个样子,表达式的形式到底代表什么含义,这些 ...
随机推荐
- 创建自托管的SignalR服务端
微软官方例子地址:http://www.asp.net/signalr/overview/deployment/tutorial-signalr-self-host 1.说明: SignalR服务端可 ...
- cmd编译运行Java文件详解
①准备工作 首先用记事本编写HelloWorld.java放至G:\Javaspace路径 public class HelloWorld{ public static void main(Strin ...
- 在PHP中开启CURL扩展,使其支持curl()函数
在用PHP开发CMS的时候,要用到PHP的curl函数,默认状态下,这个函数需要开启CURL扩展,有主机使用权的,可通过PHP.ini文件开启本扩展,方法如下: 1.打开php.ini,定位到;ext ...
- PHP二维数组排序函数
PHP一维数组的排序可以用sort(),asort(),arsort()等函数,但是PHP二维数组的排序需要自定义. 以下函数是对一个给定的二维数组按照指定的键值进行排序,先看函数定义: functi ...
- shopnc B2B2C商城 Nginx下开启伪静态
B2B2C商城 Nginx下开启伪静态,伪静态开启后,对系统的SEO极为有利,可以最大限度让商城页面被搜索引擎抓取,但在实际安装中,很多客户在这块都会遇到各种各样的问题. 1. 编辑商城配置文件(da ...
- python之6-2高阶函数
1. map函数 map(函数A,字符串或者列表) map函数的意思是将函数A依次作用到字符串的每个字符或者列表的每个元素. 例如: map(lambda x: x*x,[1,2]) [1, 4] 这 ...
- 转:从BeagleBone谈AM335x硬件系统设计
链接:http://blog.chinaunix.net/uid-730738-id-3266690.html 作者:chenzhufly 从BeagleBone谈AM335x硬件系统设计 日期 ...
- append与remove的简单使用
点击Add More按钮页面会自动添加一个输入框和Remove按钮,点击Remove按钮则此行元素将被移除. <!DOCTYPE html> <html lang="en& ...
- CCI_chapter 2 Linked Lists
2.1 Write code to remove duplicates from an unsorted linked list /* Link list node */ struct node { ...
- logstash tag使用说明
zjtest7-frontend:/usr/local/logstash-2.3.4/config# cat stdin04.conf input { stdin { } } filter { # d ...