了解C#中Lambda表达式的用法

news2025/1/16 2:52:32

Lambda表达式是一个匿名函数,是一种高效的类似于函数式编程的表达式,Lambda简化了开发中需要编写的代码量。它可以包含表达式和语句,并且可用于创建委托或表达式目录树类型,支持带有可绑定到委托或表达式树的输入参数的内联表达式。

 

1、Lambda来源

1920年到1930年期间,数学家Alonzo Church等人发明了Lambda积分。Lambda积分是用于表示函数的一套系统,它使用希腊字母Lambda(λ)来表示无名函数。近年来,函数式编程语言(如Lisp)使用这个术语来表示可以直接描述函数定义的表达式,表达式不再需要有名字。

2、Lambda表达式

Lambda表达式是C# 3.0/.NET 3.x 新增特性,Lambda表达式的语法由Lambda运算符和左边的参数部分以及右边的Lambda主体构成。

如下图,

 例如,

using System;
class ListSort
{
    static void Main()
    {
        int[] nums = { 3, 6, 8, 1, 2, 9 };
        //使用匿名方法实现 Comparison
        Array.Sort(nums, delegate (int i, int j) {
            if (i == j)                       // 这个接口的返回值为 1 0 -1. 用来实现排序
            {                               // 这里是倒序排列
                return 0;    //相等 返回 0
            }
            else if (i < j)
            {
                return 1;
            }
            else
                return -1;
        });
        foreach (int i in nums)
            Console.Write(i + ",");
        Console.WriteLine();
        nums = new int[] { 13, 16, 18, 11, 12, 19 };
        //使用lambda实现 Comparison
        Array.Sort(nums, (int i, int j) => {  //使用匿名方法实现 Comparison
            if (i == j)                       // 这个接口的返回值为 1 0 -1. 用来实现排序
            {                               // 这里是倒序排列
                return 0;    //相等 返回 0
            }
            else if (i < j)
            {
                return 1;
            }
            else
                return -1;
        });
        foreach (int i in nums)
            Console.Write(i + ",");
        Console.WriteLine();
        nums = new int[] { 23, 26, 28, 21, 22, 29 };
        //使用定义方法实现 Comparison
        Array.Sort(nums, CompareValue);
        #region output
        foreach (int i in nums)
            Console.Write(i + ",");
        Console.WriteLine();
        #endregion
    }
    private static int CompareValue(int i, int j)
    {
        if (i == j)                       // 这个接口的返回值为 1 0 -1. 用来实现排序
        {                               // 这里是倒序排列
            return 0;    //相等 返回 0
        }
        else if (i < j)
        {
            return 1;
        }
        else
            return -1;
    }
}

 

注意:

1)Lambda表达式中的参数列表(参数数量、类型和位置)必须与委托相匹配;

2)表达式中的参数列表不一定需要包含类型,除非委托有refout关键字(此时必须显示声明);

3)如果没有参数,必须使用一组空的圆括号;

3、Lambda发展过程

从最开始委托匿名方法,发展到Lambda表达式,只是更方便了,本质是相同的。方法和委托等者是编译器帮我们声明定义了。变化过程如下图,

 

 

4、Lambda 语句和Lambda 表达式区别

Lambda表达式有两种类型:一是Lambda表达式,二是语句Lambda。语句Lambda 和 表达式Lambda 的区别在于,前者在 =>右边有一个语句块(大括号),而后者只有一个表达式(没有return 和大括号)。

例如,

//Lambda 语句
Action<string> greet = name =>
{
    string greeting = $"Hello {name}!";
    Console.WriteLine(greeting);
};
greet("World");
//Lambda 表达式
Func<double, double> cube = x => x * x * x;
Console.WriteLine(cube(2))

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1149189.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

贝叶斯变分方法:初学者指南--平均场近似

Eric Jang: A Beginners Guide to Variational Methods: Mean-Field Approximation (evjang.com) 一、说明 变分贝叶斯 (VB) 方法是统计机器学习中非常流行的一系列技术。VB 方法允许我们将 统计推断 问题&#xff08;即&#xff0c;给定另一个随机变量的值来推断随机变量的值&…

基本微信小程序的驾校宝典系统-驾照考试系统

项目介绍 系统模块分析是对系统的各个模块做出相应的说明以及解释。此系统的模块分别有用户模块、服务端模块和管理端模块这两大基本模块&#xff0c;其中服务端模块包括了首页、教练信息、教练咨讯、考试预约、我的等&#xff1b;而管理端模块则包括了个人中心、用户管理、教…

什么是 CNN? 卷积神经网络? 怎么用 CNN 进行分类?(2)

参考视频&#xff1a;https://www.youtube.com/watch?vE5Z7FQp7AQQ&listPLuhqtP7jdD8CD6rOWy20INGM44kULvrHu 视频4&#xff1a;CNN 中 stride 的概念 如上图&#xff0c;stride 其实就是 ”步伐“ 的概念。 默认情况下&#xff0c;滑动窗口一次移动一步。而当 stride …

C# OpenCvSharp DNN 部署L2CS-Net人脸朝向估计

效果 项目 代码 using OpenCvSharp; using OpenCvSharp.Dnn; using System; using System.Collections.Generic; using System.Drawing; using System.Drawing.Drawing2D; using System.Linq; using System.Text; using System.Windows.Forms;namespace OpenCvSharp_DNN_Demo …

(1)(1.10) JSN-SR04T声纳

文章目录 前言 1 连接到自动驾驶仪 2 参数说明 前言 JSN-SR04T 是一种超声波距离传感器。有两个版本 v2.0 和 v3.0。v2.0 的作用范围为 25 至 450cm&#xff0c;v3.0 的作用范围为 20 至 600cm。也更稳定。由于量程很短&#xff0c;因此使用范围有限。 1 连接到自动驾驶仪 …

TensorFlow学习笔记(未完待续)

文章目录 tf.Graph().as_default()sessiontensorflow.placeholder()tf.summary tf.Graph().as_default() with tf.Graph().as_default():with tf.device(/gpu:str(GPU_INDEX)):TensorFlow中所有计算都会被转化为计算图上的节点。是一个通过计算图的形式来表述计算的编程系统&a…

SAP软件如何查询销售订单的删除记录 <转载>

原文链接&#xff1a;https://mp.weixin.qq.com/s/SFC5enOcH1tizeU8N3JHXQ SAP软件中销售订单如果被删除是不能通过VA02和VA3或VA05查询的‍‍到相关记录的&#xff0c;系统会报错&#xff08;如图&#xff09; 销售订单不像某些凭证&#xff08;比如采购订单&#xff0c;采购…

无线接收芯片CMT2219A/无线发射芯片CMT2119A实现无线遥控开关、插座、门铃无线方案

CMT2219A 是一款超低功耗、高性能、OOK 和 (G)FSK 接收器&#xff0c;适用于各种 300 至 960 MHz 无线应用。 它是 CMOSTEK NextGenRFTM 系列的一部分&#xff0c;该系列包括完整的发射器、接收器和收发器系列。 所有功能均可通过离线 EEPROM 编程或在线寄存器写入进行配置。 …

飞利浦的台灯好用吗?飞利浦、书客、雷士护眼台灯对比测评

虽然台灯是许多家庭都会有的照明设备&#xff0c;但是很多家长并不清楚孩子学习时使用的台灯其实是非常有讲究的。如果孩子长时间使用不适合或者劣质的台灯&#xff0c;会在不知不觉中造成视力的损伤&#xff0c;从而近视。所以一款合适的护眼台灯是真的能够很好的起到护眼效果…

不知道怎么显示长标题?这里有小技巧,让你的内容更简洁明了!

&#x1f3ac; 江城开朗的豌豆&#xff1a;个人主页 &#x1f525; 个人专栏 :《 VUE 》 《 javaScript 》 &#x1f4dd; 个人网站 :《 江城开朗的豌豆&#x1fadb; 》 ⛺️ 生活的理想&#xff0c;就是为了理想的生活 ! ​ 目录 &#x1f4d8; 文章内容 ⭐ 写在最后 ⭐…

嵌入式软件工程师面试题——2025校招社招通用(五)

说明&#xff1a; 面试题来源于网络书籍&#xff0c;公司题目以及博主原创或修改&#xff08;题目大部分来源于各种公司&#xff09;&#xff1b;文中很多题目&#xff0c;或许大家直接编译器写完&#xff0c;1分钟就出结果了。但在这里博主希望每一个题目&#xff0c;大家都要…

仿真翻页企业内刊制作方法

现如今很多企业都会把自身的企业文化做成电子内刊形式&#xff0c;不再停留于传统纸质的形式&#xff0c;而这种电子版的书更容易被翻阅和传播。特别是员工可以随时随地来阅读企业的文化价值和发展趋向&#xff0c;进而创造出更多的经济效益。不得不说&#xff0c;一本企业文化…

Vue3最佳实践 第八章 ESLint 与 测试 (TypeScript 中Jest与检测环境集成)

TypeScript 中Jest与检测环境集成 ​Vite 已经发布很久了现在Vue3和Vite的生态正在蓬勃发展&#xff0c;现在很多项目中都用到了Vite vue3TypeScript技术栈&#xff0c;进行企业级的项目开发。本文将一步步帮助你创建一个标准的Vite Vue3 TypeScriptJest企业级开发与测试环境…

wxpython如何设置window上任务栏的进度条

该功能是各大编译器或者一些软件在执行耗时操作时&#xff0c;显示进度的一种方式&#xff1a; Qt 如果是使用的pyQt或者是Qt就很简单了&#xff0c;直接使用QWinTaskbarProgress就可以完成该功能。 Wxpython 但是wxpython就没有那么简单了&#xff0c;需要了解一些window的特…

项目经理有责任,没权利,如何确保项目顺利交付?

由于项目经理在项目中所背负的责任并未被赋予相应的权力&#xff0c;因此在协调资源和组织协同工作方面&#xff0c;他们无法简单地借助权力来解决问题。一旦项目出现问题&#xff0c;不论责任在哪一方&#xff0c;项目经理都首当其冲地需要承担责任。 虽然项目经理看似权力很…

SVN出现Cleanup failed to process the following paths...

SVN报错&#xff0c;需要执行SVN的清理命令clean up&#xff0c;但clean up时出现错误Cleanup failed to process the following paths... 解决办法&#xff1a; 1、clean up的窗口&#xff0c;勾选Break locks和Fix time stamps&#xff08;简单方便&#xff09;&#xff1b…

ESP8266模块常规调试过程讲解

ESP8266-WIFI模块串口调试过程讲解 一、ESP8266介绍 ESP8266是一个高度集成的无线SoC(System on a Chip)模块,基于ESP8266芯片,集成了Wi-Fi功能。具有丰富的特性和功能,广泛应用于各种物联网项目中。 ESP8266模块支持802.11b/g/n无线标准,内置TCP/IP协议栈,可以实现串…

Linux之centos7安装配置及Linux常用命令

&#x1f389;&#x1f389;欢迎来到我的CSDN主页&#xff01;&#x1f389;&#x1f389; &#x1f3c5;我是君易--鑨&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; &#x1f31f;推荐给大家我的博客专栏《LInux实战开发》。&#x1f3af;&#x1f3af; …

私有云:【7】VCenter安装Composer服务

私有云&#xff1a;【7】VCenter安装Composer服务 1、创建Composer数据库2、VCenter安装Composer服务2.1、安装Native Client组件2.2、对Composer服务器扩容出一个安装盘 3、安装Composer服务 服务器创建好后配置IP&#xff0c;加入域以及添加域管理员cloudadmin&#xff0c;可…

如何校准振弦采集模块以获得更准确的读数?

如何校准振弦采集模块以获得更准确的读数&#xff1f; 振弦采集模块是一种用于测量振弦传感器输出的模块。在使用振弦采集模块时&#xff0c;校准是非常重要的&#xff0c;因为它可以确保您获得准确的测量结果。本文将介绍如何校准振弦采集模块以获得更准确的读数。 1. 使用标…