热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

C#Lambda表达式详解

Lambda表达式教程本文提供全流程,中文翻译。Chinar坚持将简单的生活方式,带给世人!(拥有更好的阅读体验——高分辨率

Lambda表达式教程





本文提供全流程,中文翻译。

Chinar 坚持将简单的生活方式,带给世人!

(拥有更好的阅读体验 —— 高分辨率用户请根据需求调整网页缩放比例)


Chinar —— 心分享、心创新!

助力快速理解 Lambda 表达式的用法、规范

为新手节省宝贵的时间,避免采坑!


  • 1
    • Lambda —— 表达式
  • 2
    • Parameter —— 参数
  • 3
    • Empty return value —— 空返回值函数
  • 4
    • Lambda Statement —— 表达式 语句
  • 5
    • Example 1 —— 示例1
  • 6
    • Example 2 —— 示例2
  • 7
    • Toggle AddListener Lambda —— 动态添加监听方法 Lambda
  • 支持
    • May Be —— 搞开发,总有一天要做的事!



全文高清图片,点击即可放大观看 (很多人竟然不知道)



1

Lambda —— 表达式


Lambda 表达式是一个匿名函数,用它可以高效简化代码,常用作委托,回调

Lambda 表达式都使用运算符=>,所以当你见到这个符号,基本上就是一个 Lambda 表达式

Lambda 运算符的左边是输入参数(),=>,右边是表达式或语句块

Lambda 表达式,是可以访问到外部变量的

可以将此表达式分配给委托类型
举个栗子黑白88

///

/// 控制台程序自己创建的一个测试类/// class Chinar{/// /// 方法A/// /// 整形/// 整形/// 整形static int MethodA(int a, int b){return a &#43; b;}static void Main(string[] args){//Lambda 表达式不需要声明类型&#xff0c;因为前边3个 int 定义过了 &#xff1b;&#61;>是固定格式//有匿名函数的地方&#xff0c;就可以用 Lambda 表达式来代替Func<int, int, int> lambda &#61; (args1, args2) &#61;> { return args1 &#43; args2; };Console.WriteLine("表达式1&#xff1a;" &#43; lambda(100, 1));//当传入参数只有一个时&#xff0c;可省略很多//不需要括号&#xff0c;不需要return关键字&#xff0c;编译器会自动完成添加Func<int, int> lambda2 &#61; a &#61;> a * a;Console.WriteLine("表达式2&#xff1a;" &#43; lambda2(9));Console.ReadLine();}}


2

Parameter —— 参数


Lambda 只有一个参数时&#xff0c;可以省略括号

如果多个参数&#xff0c;则必须加括号&#xff0c;并且用&#xff0c;隔开

举个栗子黑白88
单参数 &#xff0c;匿名函数&#xff1a;

x &#61;> x * x; //传入参数为&#xff1a;x&#xff0c;返回值为 x*x 的值

多参数 &#xff0c;匿名函数&#xff1a;

(x, y) &#61;> x &#61;&#61; y;//传入参数为&#xff1a;x,y&#xff0c;返回值为 bool 值



3

Empty return value —— 空返回值函数


当我们所需的函数返回值为空时&#xff0c;需要指定空返回值
举个栗子黑白88
无参数 &#xff0c;无返回值&#xff0c;匿名函数&#xff1a;

using UnityEngine;public class ChinarLambda : MonoBehaviour
{delegate void ChinarDelegate(); //委托 ChinarDelegate &#xff0c;空返回值&#xff0c;无参数ChinarDelegate cd; //委托对象void Start(){cd &#61; () &#61;> { print("Chinar"); }; //无参数&#xff0c;无返回值&#xff0c;{函数代码块}&#xff1a;打印Chinarcd(); //调用委托}
}

运行结果&#xff1a;打印

Chinar


有参数 &#xff0c;无返回值&#xff0c;匿名函数&#xff1a;

using UnityEngine;public class ChinarLambda : MonoBehaviour
{delegate void ChinarDelegate(int a, int b); //委托 ChinarDelegate &#xff0c;空返回值&#xff0c;2个 Int 参数ChinarDelegate cd; //委托对象void Start(){cd &#61; (a, b) &#61;>{print(a); print(b);}; //传入参数为&#xff1a;a,b&#xff0c;{函数代码块}&#xff1a;分别打印 a b 的值cd(1, 2); //调用委托}
}

运行结果&#xff1a;打印

1
2



4

Lambda Statement —— 表达式 语句


当表达式&#xff0c;函数体有多个语句时&#xff0c;只需要将所有代码写入 { 方法体 }
举个栗子黑白88
有参数 &#xff0c;无返回值&#xff0c;匿名函数&#xff1a;

using UnityEngine;public class ChinarLambda : MonoBehaviour
{delegate void ChinarDelegate(string str); //委托 ChinarDelegate &#xff0c;空返回值&#xff0c;2个 Int 参数ChinarDelegate cd; //委托对象void Start(){cd &#61; s &#61;>{string str &#61; s &#43; "|" &#43; s;print(str);}; //传入参数为&#xff1a;s&#xff0c;{函数代码块}&#xff1a;cd("Chinar"); //调用委托}
}

运行结果&#xff1a;打印

Chinar|Chinar



5

Example 1 —— 示例1


调用 LinQ First 函数

First 函数会找到满足条件&#xff0c;最近的一个

a&#xff1a; strList 数组中的元素&#xff0c;如果元素的长度大于 5 返回满足条件的 a 元素
举个栗子黑白88
有参数 &#xff0c;无返回值&#xff0c;匿名函数&#xff1a;

using System.Collections.Generic;
using System.Linq;
using UnityEngine;public class ChinarLambda : MonoBehaviour
{void Start(){List<string> strList &#61; new List<string>()//声明一个 string 列表&#xff0c;并添加数据{"ABC","123456","哈哈","1234567890"};string result &#61; strList.First(a &#61;> a.Length > 5); //LinQ 的 First函数&#xff0c;a&#xff1a;是strList数组中的元素&#xff0c;如果元素的长度大于5&#xff1b;—— First 函数会找到满足条件&#xff0c;最近的一个print(strList.First(a &#61;> a.Length > 5)); //Lambda 表达式的返回值是根据你的函数决定的&#xff0c;在此是string类型的返回值&#xff0c;所以可以直接写一句}
}

运行结果&#xff1a;打印

123456



6

Example 2 —— 示例2


直接将用表达式代替委托类型&#xff0c;可大量精简代码量
举个栗子黑白88

using System;
using UnityEngine;public class ChinarLambda : MonoBehaviour
{void Start(){// 1//传入参数是 Chinar&#xff0c;所以 s 此时就代表 "Chinar"&#xff0c;因为在 LambdaFun 函数中 print(func(str)) 方法&#xff0c;是以传入参数&#xff0c;传给了委托//在此经过了 Lambda 直接对 “Chinar” 进行处理&#xff0c;并返回处理后的字符串&#xff0c;直接打印LambdaFun("Chinar", s &#61;> s.Replace("Chinar", "毋桐"));// 2//原理同上LambdaFun("大侦探福尔马林", s &#61;>{if (s.Contains("马林")){s &#61; s.Replace("马林", "摩斯");}return s;});}///

/// 测试表达式函数/// /// 入参&#xff1a;字符串/// 入参&#xff1a;Func委托public void LambdaFun(string str, Func<string, string> func){print(func(str)); //打印 经过委托处理后返回的字符}
}

运行结果&#xff1a;打印

123456



7

Toggle AddListener Lambda —— 动态添加监听方法 Lambda


再举个例子

在动态监听方法时&#xff0c;可直接简化/省略另建方法

并且 Lambda 表达式&#xff0c;可以访问到外部变量的

未完。。。
举个栗子黑白88

using UnityEngine;
using UnityEngine.UI;///


/// Chinar专用测试类
///

public class ChinarDemo : MonoBehaviour
{void Start(){//找到组件&#xff0c;动态添加监听&#xff0c;Lambda表达式&#xff0c;精简&#xff01;外加三目运算GameObject.Find("Toggle").GetComponent().onValueChanged.AddListener(isOn &#61;> print(isOn ? "开" : "关"));}/// /// 直接可省略此方法 —— 监听方法&#xff1a;可手动/动态绑定/// 二者效果一样/// /// public void OnClick(bool isOn){if (isOn){print("开");}else{print("关");}}
}



支持

May Be —— 搞开发&#xff0c;总有一天要做的事&#xff01;


拥有自己的服务器&#xff0c;无需再找攻略&#xff01;

Chinar 提供一站式教程&#xff0c;闭眼式创建&#xff01;

为新手节省宝贵时间&#xff0c;避免采坑&#xff01;


先点击领取 —— 阿里全产品优惠券 (享受最低优惠)


1 —— 云服务器超全购买流程 (新手必备!)

2 —— 阿里ECS云服务器自定义配置 - 购买教程(新手必备!)

3—— Windows 服务器配置、运行、建站一条龙 !

4 —— Linux 服务器配置、运行、建站一条龙 !






技术交流群&#xff1a;806091680 &#xff01; Chinar 欢迎你的加入




END


本博客为非营利性个人原创&#xff0c;除部分有明确署名的作品外&#xff0c;所刊登的所有作品的著作权均为本人所拥有&#xff0c;本人保留所有法定权利。违者必究

对于需要复制、转载、链接和传播博客文章或内容的&#xff0c;请及时和本博主进行联系&#xff0c;留言&#xff0c;Email: ichinar&#64;icloud.com

对于经本博主明确授权和许可使用文章及内容的&#xff0c;使用时请注明文章或内容出处并注明网址


推荐阅读
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 本文介绍了RPC框架Thrift的安装环境变量配置与第一个实例,讲解了RPC的概念以及如何解决跨语言、c++客户端、web服务端、远程调用等需求。Thrift开发方便上手快,性能和稳定性也不错,适合初学者学习和使用。 ... [详细]
  • Python瓦片图下载、合并、绘图、标记的代码示例
    本文提供了Python瓦片图下载、合并、绘图、标记的代码示例,包括下载代码、多线程下载、图像处理等功能。通过参考geoserver,使用PIL、cv2、numpy、gdal、osr等库实现了瓦片图的下载、合并、绘图和标记功能。代码示例详细介绍了各个功能的实现方法,供读者参考使用。 ... [详细]
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 拥抱Android Design Support Library新变化(导航视图、悬浮ActionBar)
    转载请注明明桑AndroidAndroid5.0Loollipop作为Android最重要的版本之一,为我们带来了全新的界面风格和设计语言。看起来很受欢迎࿰ ... [详细]
  • 不同优化算法的比较分析及实验验证
    本文介绍了神经网络优化中常用的优化方法,包括学习率调整和梯度估计修正,并通过实验验证了不同优化算法的效果。实验结果表明,Adam算法在综合考虑学习率调整和梯度估计修正方面表现较好。该研究对于优化神经网络的训练过程具有指导意义。 ... [详细]
  • 利用Visual Basic开发SAP接口程序初探的方法与原理
    本文介绍了利用Visual Basic开发SAP接口程序的方法与原理,以及SAP R/3系统的特点和二次开发平台ABAP的使用。通过程序接口自动读取SAP R/3的数据表或视图,在外部进行处理和利用水晶报表等工具生成符合中国人习惯的报表样式。具体介绍了RFC调用的原理和模型,并强调本文主要不讨论SAP R/3函数的开发,而是针对使用SAP的公司的非ABAP开发人员提供了初步的接口程序开发指导。 ... [详细]
  • 本文介绍了在mac环境下使用nginx配置nodejs代理服务器的步骤,包括安装nginx、创建目录和文件、配置代理的域名和日志记录等。 ... [详细]
  • 1.RoIPoolingRoIPooling顾名思义对Roi进行Pooling操作,主要用于目标检测任务。RoI(Regionofinterest&# ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
author-avatar
十饮魂
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有