C#基础:Lambda表达式
从委托的角度来看,Lambda表达式与匿名方法没有区别。在【C#基础:匿名方法】一文中,我使用了匿名方法来调用List<T>的FindAll方法。从C# 3.0开始,在使用匿名方法的地方,完全可以用Lambda表达式来代替。Lambda表达式的定义方式为:“([参数列表]) => 表达式”。运算符“=>”是一种与赋值运算“=”具有相同优先级的右结合运算符,在英语里读作:“goes to”。
现在回过头来看我们的例子。下面的代码与【C#基础:匿名方法】一文中的代码具有相同的效果:
- class Program
- {
- static void Main(string[] args)
- {
- List<string> names = new List<string>();
- names.Add("Sunny Chen");
- names.Add("Kitty Wang");
- names.Add("Sunny Crystal");
- List<string> found = names.FindAll
- (
- // Lambda Expression Implementation
- name => name.StartsWith(
- "sunny",
- StringComparison.OrdinalIgnoreCase)
- );
- if (found != null)
- {
- foreach (string str in found)
- Console.WriteLine(str);
- }
- }
- }
上面的Lambda Expression Implementation在效果上与匿名方法没有任何区别,“=>”左边的name定义了参数(当参数个数为1的时候,圆括号可以省略),“=>”右边定义执行体。由于C# 3.0编译器具有Type Inference的能力,参数类型与返回值都将由编译器通过上下文判定,因此与匿名方法不同,Lambda表达式的参数可以不给定参数类型。当所表示的匿名方法没有任何参数时,Lambda表达式也同样可以使用,只需在“=>”左边用一对圆括号表示即可。即:
- () => Console.WriteLine("Hello!");
事实上,“Lambda表达式”这一词比较笼统,事实上“=>”运算符既可以表示Lambda表达式,也可以表示Lambda语句。Lambda语句由代码块组成,形式上很像匿名方法。请看下面的例子:
- class Program
- {
- static void Main(string[] args)
- {
- // Lambda 表达式
- Func<int, bool> dele1 = n => n > 10;
- // Lambda 语句
- Func<int, bool> dele2 = (int n) => { return n > 10; };
- Console.WriteLine(dele1(16));
- Console.WriteLine(dele1(8));
- }
- }
两种定义方法同样可以正确地输出结果。请注意,当我们希望构建表达式树的时候,情况却完全不同了:
- // ok
- Expression<Func<int, bool>> expr1 = n => n > 10;
- // error: cannot converted to an expression tree
- Expression<Func<int, bool>> expr2 = (int n) => { return n > 10; };
由此可见,在构建表达式树的时候,不能用Lambda语句(带有代码语句的Lambda表达式),而应该使用Lambda表达式。从这里就可以看出匿名方法与Lambda表达式的区别了。
有关委托的高级话题以及表达式树的内容,我会在后面的文章中继续研究。
C#基础:Lambda表达式的更多相关文章
- 【2017-06-01】Linq基础+Lambda表达式实现对数据库的增删改查
一.Linq to sql 类 高集成化的数据库访问技术 使用Linq可以代替之前的Ado.Net.省去了自己敲代码的实体类和数据访问类的大量工作. 实体类: 添加一个Linq to sql 类 -- ...
- Linq基础+Lambda表达式对数据库的增删改及简单查询
一.Linq to sql 类 高集成化的数据库访问技术 使用Linq可以代替之前的Ado.Net,省去了自己敲代码的实体类和数据访问类的大量工作 实体类: 添加一个Linq to sql 类 --- ...
- Java 基础 —— Lambda 表达式
概述 阅读项目代码时,尤其是阅读一些源码时,经常会遇到 Lambda 表达式.对此之前看过相关文章,但是停留在模模糊糊的印象上.今天趁着有时间,通过一些 demo 示例,梳理一下它的用法,以备后期遗忘 ...
- Python3基础 lambda表达式 简单示例
镇场诗: 诚听如来语,顿舍世间名与利.愿做地藏徒,广演是经阎浮提. 愿尽吾所学,成就一良心博客.愿诸后来人,重现智慧清净体.-------------------------------------- ...
- 30天C#基础巩固----Lambda表达式
这几天有点不在状态,每一次自己很想认真的学习,写点东西的时候都会被各种小事情耽误,执行力太差.所以自己反思了下最近的学习情况,对于基础的知识,可以从书中和视频中学习到,自己还是需要注意下关于 ...
- java8 Lambda表达式的新手上车指南(1)--基础语法和函数式接口
背景 java9的一再推迟发布,似乎让我们恍然想起离发布java8已经过去了三年之久,java8应该算的上java语言在历代版本中变化最大的一个版本了,最大的新特性应该算得上是增加了lambda表达式 ...
- python 基础 内置函数 和lambda表达式
1.把任意数值转化为字符串有两种方法. (1)str()用于将数值转化为易于人读的形式.print(str("我是中国人"))>>>我是中国人 (2)repr() ...
- Java基础教程:Lambda表达式
Java基础教程:Lambda表达式 本文部分内容引用自OneAPM:http://blog.oneapm.com/apm-tech/226.html 引入Lambda Java 是一流的面向对象语言 ...
- 01 语言基础+高级:1-7 异常与多线程_day07 【线程池、Lambda表达式】
day07[线程池.Lambda表达式] 主要内容 等待与唤醒案例 线程池 Lambda表达式 教学目标 -[ ] 能够理解线程通信概念-[ ] 能够理解等待唤醒机制-[ ] 能够描述Java中线程池 ...
随机推荐
- poj2264 dp+路径
//Accepted 208K 0MS //dp //最长公共子序列+路径 #include <cstdio> #include <cstring> #include < ...
- oracle 之关键字exists
-----------------------------------------------------------------------SQL中EXISTS的用法---------------- ...
- java.net.SocketException: recvfrom failed: ECONNRESET (Connection reset by peer)
java.net.SocketException: recvfrom failed: ECONNRESET (Connection reset by peer)
- 2016-1-9 Quartz框架的学习,写字板demo
一:自定义view .h文件中代码如下 #import <UIKit/UIKit.h> @interface ZLpaintView : UIView @property(nonatomi ...
- 2016 - 1 - 3 国旗选择demo
// // ViewController.m // 国旗 // // Created by Mac on 16/1/3. // Copyright © 2016年 Mac. All rights re ...
- 多动手试试,其实List类型的变量在页面上取到的值可以直接赋值给一个js的Array数组变量
多动手试试,其实List类型的变量在页面上取到的值可以直接赋值给一个js的Array数组变量,并且数组变量可以直接取到每一个元素var array1 = '<%=yearList =>'; ...
- python随笔
1. 使用iter实现接收用户多行输入 stopword = '' str = '' print('请将要添加的内容输入下方,输入空白行按回车退出程序:') for line in iter(inpu ...
- electronic data interchange 电子数据交换
electronic data interchange 电子数据交换
- 集合set的使用
将无序对象储存在集合中 集合是类似于数组的一组对象,只是其中包含的项目是无序的(而数组是有序的).您通过枚举集合中的对象,或者将过滤器或测试应用到集合,来随机访问集合中的对象(使用 anyObject ...
- 通过 itms-services 协议,发布或者分享 iOS 应用程序
导读:itms-services 协议常用于 iOS 企业应用的无线部署,这可在不使用 iTunes 的情况下将内部软件发布或者分享给用户. 一.前期准备资料: 1.应用程序 (.ipa) 文件(使用 ...