什么是lambda表达式(λ表达式)

用过其他函数式语言的人可能对闭包和惰性计算很熟悉,没有用过的人也多多少少的听说过Lambda表达式。那么到底什么是lambda表达式呢?按我的看法是创建一个匿名的函数对象,从而达到简化代码的目的。以下是lambda表达式的用法:

(arg_1,...)=>{ //codes }

 Lambda表达式有时在某些资料上也被称为 箭头函数。

lambda和闭包

要搞清楚lambda表达式的作用,记得搞清楚什么是闭包?所谓闭包,引用 《JavaScript 高级程序设计》 中的一句话来解释它:“闭包是指有权访问另一个函数作用域中的变量的函数”。按我自己的理解就是在一个父函数中返回一个子函数,具体如下:

//...

Object  demo(arg_1)  {
return (arg_1)=>{ return PI;}
} //..

这样就可以达到少定义一个函数/方法的目的,让代码更干净(clean)。

由于C#7.0以及之前的版本都不能像go语言一样返回多个值,所以没有办法完全发挥闭包的优势;然而自从C#7.1开始支持元组,可以返回一个值类型的对象。所以上面的例子还可以改写:

//...

Object (double v_1, double v_2)  demo(arg_1,arg_2)  {
return (arg_1)=> { return (PI,PI);}
} //..

高阶函数

高阶函数就是可以将一个函数作为对象传递给另一个函数。如果有对其他语言或者对C#有所了解,就会想起了委托——另一个将函数作为对象传递给函数的方式,即使是C/C++也有对应的函数指针和委托构造方法(C++17)与之类似.

高阶函数在C#里面就是传递一个Lambda表达式作为参数,这么做的好处是可以让代码更简洁,典型的例子就是Javascript 的JQERY的使用方法了,然而在C#中的写法是这样的:

//...

Object  demo(arg_1)  {
Console.WirteLine(arg_1);
} //.. //使用表达式方式调用
demo(x=>"hello") ;
//使用代码块方式调用
demo(x=>{return "hello"}) ;

C# 从0到实战 lambda表达式和Expression-bodied表达式的更多相关文章

  1. 委托、匿名委托、Lambda 表达式、Expression表达式树之刨根问底

    本篇不是对标题所述之概念的入门文章,重点在阐述它们的异同点和应用场景.各位看官,这里就不啰嗦了,直接上代码. 首先定义一个泛型委托类型,如下: public delegate T Function&l ...

  2. Day 7 :一句话Python(匿名函数-lambda,三元运算,列表表达式,生成器表达式)

    注意: 1.所有的列表表达式都可以转换成生成器表达式 2.经量让标傲世简化你得操作,增加代码可读性 3.如果代码过于复杂,应该转换成普通代码 4.再代码中尽可能多使用生成器表达式. 三元运算符:简化代 ...

  3. 用五分钟重温委托,匿名方法,Lambda,泛型委托,表达式树

    这些对老一代的程序员都是老生常谈的东西,没什么新意,对新生代的程序员却充满着魅力.曾经新生代,好多都经过漫长的学习,理解,实践才能掌握委托,表达式树这些应用.今天我尝试用简单的方法叙述一下,让大家在五 ...

  4. 转帖:用五分钟重温委托,匿名方法,Lambda,泛型委托,表达式树

    用五分钟重温委托,匿名方法,Lambda,泛型委托,表达式树 这些对老一代的程序员都是老生常谈的东西,没什么新意,对新生代的程序员却充满着魅力.曾经新生代,好多都经过漫长的学习,理解,实践才能掌握委托 ...

  5. 前后端分离之vue2.0+webpack2 实战项目 -- webpack介绍

    webpack的一点介绍 Webpack 把任何一个文件都看成一个模块,模块间可以互相依赖(require or import),webpack 的功能是把相互依赖的文件打包在一起.webpack 本 ...

  6. vue2.0与实战开发

    慕课网实战 百度云 web前端实战: Node.js入门到企业Web开发中的应用 Web前端性能优化 让你的页面飞起来 前端跳槽面试必备技巧 前端JavaScript面试技巧全套 node.JS 线上 ...

  7. Asp.Net Core 2.0 项目实战(10) 基于cookie登录授权认证并实现前台会员、后台管理员同时登录

    1.登录的实现 登录功能实现起来有哪些常用的方式,大家首先想到的肯定是cookie或session或cookie+session,当然还有其他模式,今天主要探讨一下在Asp.net core 2.0下 ...

  8. Asp.Net Core 2.0 项目实战(11) 基于OnActionExecuting全局过滤器,页面操作权限过滤控制到按钮级

    1.权限管理 权限管理的基本定义:百度百科. 基于<Asp.Net Core 2.0 项目实战(10) 基于cookie登录授权认证并实现前台会员.后台管理员同时登录>我们做过了登录认证, ...

  9. Asp.Net Core 2.0 项目实战(9) 日志记录,基于Nlog或Microsoft.Extensions.Logging的实现及调用实例

    本文目录 1. Net下日志记录 2. NLog的使用     2.1 添加nuget引用NLog.Web.AspNetCore     2.2 配置文件设置     2.3 依赖配置及调用     ...

  10. Asp.Net Core 2.0 项目实战(8)Core下缓存操作、序列化操作、JSON操作等Helper集合类

    本文目录 1.  前沿 2.CacheHelper基于Microsoft.Extensions.Caching.Memory封装 3.XmlHelper快速操作xml文档 4.Serializatio ...

随机推荐

  1. SQL优化:重新编译存储过程和表

    最近发现原来执行很快的存储过程,突然慢了下来,而很多存储过程每天就运行一次,所以打算把存储过程重新编译,另外,考虑到数据在不断变化,所以也要更新表的统计信息,这样能生成比较好的执行计划. 下面是具体的 ...

  2. IDEA创建Spring Boot项目无法连接http://start.spring.io 解决方法

    1.修改代理 2. 搭建自己的SpringBoot initializer构建服务器 https://blog.csdn.net/KingBoyWorld/article/details/773732 ...

  3. 针对FILES和PATH的操作

    在修改漏洞的时候发现,根据建议都使用NIO包的FILES和PATH来进行文件操作,来保证安全性. import java.nio.file.Files;import java.nio.file.Pat ...

  4. 记录一次使用locust压测的过程

    1 脚本# encoding: utf-# @Time : 2021/6/21 1:28 下午 # @Author : Sail # @File : main.py # @Software: PyCh ...

  5. pytest之运行环境

    简介 pytest是Python最流程化的单元测试框架,它具有允许直接使用assert进行断言,而不需要使用self.assert*:可以自动寻找单测文件.类和函数,还可支持执行部分用例:Modula ...

  6. 在POD的ENV中添加POD的信息

    主要用到的参数: - name POD_NAME volumeFrom: fieldRef: fieldPath:   metadata.name - name: POD_IP volumeFrom: ...

  7. IP与bigint互转

    IP转为bigint create function [dbo].[iptobigint](@ipinfo varchar(16)) returns bigint as begin declare @ ...

  8. layui使用OSS上传

    1.首先要把aliyun-oss-sdk.js包下载下来,放到指定的目录下面  在要用的页面引入或者在index.html入口文件全局引入: <script src="util/ali ...

  9. vs2010 Windows程序打包成安装包方法

    1.  在vs2010 选择"新建项目"--"其他项目类型"--"Visual Studio Installerà"安装项目": ...

  10. ElasticSearch 实现分词全文检索 - 测试数据准备

    目录 ElasticSearch 实现分词全文检索 - 概述 ElasticSearch 实现分词全文检索 - ES.Kibana.IK安装 ElasticSearch 实现分词全文检索 - Rest ...