【小白专用24.6.8】C#Lambda表达式

Lambda表达式可以采用以下任意一种形式的表达式:
1.表达式Lambda,表达式为其主体:

(input-parameters) => expression
1
2.语句Lambda,语句块作为其主体:

(input-parameters) => {<sequence-of-statements>}

异步Lambda
通过使用async和await关键字,可以轻松创建包含异步处理的Lambda表达式和语句。

以使用异步Lambda添加同一事件处理程序。若要添加此程序,请在Lambda参数列表前添加async修饰符,如下面示例所示:

public partial class Form1 : Form
  {
          public Form1()
          {
                  InitializeComponent();
                  button1.Click += async (sender, e) =>
                  {
                          await ExampleMethodAsync();
                          textBox1.Text += "\r\nControl returned to Click event handler.\n";
                  };
         }
         private async Task ExampleMethodAsync()
         {
                 // The following line simulates a task-returning       asynchronous process.
                 await Task.Delay(1000);
         }
 }

Lambda表达式和元组

Lambda表达式中的类型推理

customer.Where(c => c.City == "London");

Lambda —— 表达式
Lambda 表达式是一个匿名函数,用它可以高效简化代码,常用作委托,回调
Lambda 表达式都使用运算符=>,所以当你见到这个符号,基本上就是一个 Lambda 表达式
Lambda 运算符的左边是输入参数(),=>,右边是表达式或语句块
Lambda 表达式,是可以访问到外部变量的
可以将此表达式分配给委托类型

 static void Main(string[] args)
 {

     //Lambda 表达式不需要声明类型,因为前边3个 int 定义过了 ;=>是固定格式
     //有匿名函数的地方,就可以用 Lambda 表达式来代替
     Func<int, int, int> lambda = (args1, args2) => { return args1 + args2; };
     Console.WriteLine("表达式1:" + lambda(100, 1));

     //当传入参数只有一个时,可省略很多
     //不需要括号,不需要return关键字,编译器会自动完成添加
     Func<int, int> lambda2 = a => a * a;
     Console.WriteLine("表达式2:" + lambda2(9));
     Console.Read();
 }

 /// <summary>
 /// 方法A
 /// </summary>
 /// <param name="a">整形</param>
 /// <param name="b">整形</param>
 /// <returns>整形</returns>
 static int MethodA(int a, int b)
 {
     return a + b;
 }

Parameter —— 参数

Lambda 只有一个参数时,可以省略括号
如果多个参数,则必须加括号,并且用,隔开


单参数 ,匿名函数:
x => x * x; //传入参数为:x,返回值为 x*x 的值

多参数 ,匿名函数:
(x, y) => x == y;//传入参数为:x,y,返回值为 bool 值

无参数 ,无返回值,匿名函数:

using UnityEngine;


public class ChinarLambda : MonoBehaviour
{
    delegate void  ChinarDelegate(); //委托 ChinarDelegate ,空返回值,无参数
    ChinarDelegate cd;               //委托对象


    void Start()
    {
        cd = () => { print("Chinar"); }; //无参数,无返回值,{函数代码块}:打印Chinar
        cd();                            //调用委托
    }
}

有参数 ,无返回值,匿名函数:

using UnityEngine;


public class ChinarLambda : MonoBehaviour
{
    delegate void  ChinarDelegate(int a, int b); //委托 ChinarDelegate ,空返回值,2个 Int 参数
    ChinarDelegate cd;                           //委托对象


    void Start()
    {
        cd = (a, b) =>{print(a); print(b);}; //传入参数为:a,b,{函数代码块}:分别打印 a b 的值
        cd(1, 2);                            //调用委托
    }
}

Lambda Statement —— 表达式 语句

当表达式,函数体有多个语句时,只需要将所有代码写入 { 方法体 }
有参数 ,无返回值,匿名函数:

using UnityEngine;


public class ChinarLambda : MonoBehaviour
{
    delegate void  ChinarDelegate(string str); //委托 ChinarDelegate ,空返回值,2个 Int 参数
    ChinarDelegate cd;                         //委托对象


    void Start()
    {
        cd = s =>
        {
            string str = s + "|" + s;
            print(str);
        };            //传入参数为:s,{函数代码块}:
        cd("Chinar"); //调用委托
    }
}

在C#的语法中有一种比较特殊的写法,叫做Lambda表达式,这种表达式的写法在于你查询数据的时候直接是使用以下箭头的形式来表示查询语句的:=>。例如,我们要查找学生的List<Student>集合中班级编号为1001的所有学生数据,我们即可用Studentlist.Where(t=>t.ClassCode=‘1001’)语句来直接完成,无需再写繁琐的foreach语句或者for循环。Lambda表达式的运算符即为=>

一、Lambda表达式定义

        Lambda表达式实际上是一种匿名函数,在Lambda表达式中可以包含语句以及运算等操作。并且可用于创建委托或表达式目录树类型,支持带有可绑定到委托或表达式树的输入参数的内联表达式。使用Lambda表达式可大大减少代码量,使得代码更加的优美、简洁,更有可观性。

在C# List集合我们有时候需要筛选或者大量的运算操作俺平常我们需要for foreach对List集合进行循环操作如果在复杂情况下必然操作也有点麻烦了。而Lambda表达式一句完成(我们这里判断条件跟数据库有点相似)

1.查询班级为1001下所有的学生信息

where查询满足条件下所有的元素 t是list学生的对象
ToList()强制转换list
这里我们在赋值那里已经把班级编号分好了所以直接编辑编号对象==“1001”

2.查询班级编号为1001并且把查询出来的结果按照年龄由小到大排序
orderBy 排序(跟数据库一样) t=>t.Age根据age进行排序

3.求1001班所有学生姓名中包含刺的学生

总结:以上就是Lambda常用方式

where查询满足条件下所有的元素 t是list学生的对象
ToList()强制转换list
orderBy 从小到大
OrderByDescending从大到小
sum求和 
Contains包含
EndsWith("")以“”结尾
 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

★pwn 24.04环境搭建保姆级教程★

★pwn 24.04环境搭建保姆级教程★ &#x1f338;前言&#x1f33a;Ubuntu 24.04虚拟机&#x1f337;VM&#x1f337;Ubuntu 24.04镜像 &#x1f33a;工具&#x1f337;可能出现的git clone错误&#x1f337;复制粘贴问题&#x1f337;攻击&#x1f337;编题 &#x1f33a;美化&…

C++的STL 中 set.map multiset.multimap 学习使用详细讲解(含配套OJ题练习使用详细解答)

目录 一、set 1.set的介绍 2.set的使用 2.1 set的模板参数列表 2.2 set的构造 2.3 set的迭代器 2.4 set的容量 2.5 set的修改操作 2.6 set的使用举例 二、map 1.map的介绍 2.map的使用 2.1 map的模板参数说明 2.2 map的构造 2.3 map的迭代器 2.4 map的容量与元…

【数据结构】栈的应用

目录 0 引言 1 栈在括号匹配中的应用 2 栈在表达式求值中的应用 2.1 算数表达式 2.2 中缀表达式转后缀表达式 2.3 后缀表达式求值 3 栈在递归中的应用 3.1 栈在函数调用中的作用 3.2 栈在函数调用中的工作原理 4 总结 0 引言 栈&#xff08;Stack&#xff09;是一…

【网络编程开发】8.TCP连接管理与UDP协议 9.IP协议与ethernet协议

8.TCP连接管理与UDP协议 三次握手 三次握手的过程在TCP/IP网络通信中起着至关重要的作用&#xff0c;它不仅确保了数据的可靠传输&#xff0c;还为两端的数据传输提供了稳定的连接初始化过程。这一过程涉及到几个关键步骤&#xff0c;每个步骤都有其特定的目的和功能。 步骤&…

LSTM卷土重来之Vision-LSTM横空出世!!

在Transformer诞生三年后&#xff0c;谷歌将这一自然语言处理的重要研究扩展到了视觉领域&#xff0c;也就是Vision Transformer。 论文链接&#xff1a;https://arxiv.org/abs/2406.04303 项目链接: https://nx-ai.github.io/vision-lstm/ GPT-4o深夜发布&#xff01;Plus免…

MySQL—多表查询—联合查询

一、引言 之前学习了连接查询。现在学习联合查询。 union&#xff1a;联合、联盟 对于union查询&#xff0c;就是把多次查询的结果合并起来&#xff0c;形成一个新的查询结果集 涉及到两个关键字&#xff1a;union 和 union all 注意&#xff1a; union 会把上面两个SQL查询…

Python魔法之旅-魔法方法(23)

目录 一、概述 1、定义 2、作用 二、应用场景 1、构造和析构 2、操作符重载 3、字符串和表示 4、容器管理 5、可调用对象 6、上下文管理 7、属性访问和描述符 8、迭代器和生成器 9、数值类型 10、复制和序列化 11、自定义元类行为 12、自定义类行为 13、类型检…

MySQL—多表查询—子查询(介绍)

一、引言 上一篇博客学习完联合查询。 这篇开始&#xff0c;就来到多表查询的最后一种形式语法块——子查询。 &#xff08;1&#xff09;概念 SQL 语句中嵌套 SELECT 语句&#xff0c;那么内部的 select 称为嵌套查询&#xff0c;又称子查询。 表现形式 注意&#xff1a; …

零基础入门学用Arduino 第一部分(二)

重要的内容写在前面&#xff1a; 该系列是以up主太极创客的零基础入门学用Arduino教程为基础制作的学习笔记。个人把这个教程学完之后&#xff0c;整体感觉是很好的&#xff0c;如果有条件的可以先学习一些相关课程&#xff0c;学起来会更加轻松&#xff0c;相关课程有数字电路…

转型AI产品经理(4):“认知负荷”如何应用在Chatbot产品

认知负荷理论主要探讨在学习过程中&#xff0c;人脑处理信息的有限容量以及如何优化信息的呈现方式以促进学习。认知负荷定律认为&#xff0c;学习者的工作记忆容量是有限的&#xff0c;而不同类型的认知任务会对工作记忆产生不同程度的负荷&#xff0c;从而影响学习效果。以下…

项目总结报告(Word模板)

2 项目工作成果 2.1 交付给用户的产品 2.2 交付给研发中心的产品 2.2.1 代码部分 2.2.2 文档部分 2.3 需求完成情况与功能及性能符合性统计 2.3.1 需求完成情况统计 2.3.2 功能符合性分析 2.3.3 性能符合性分析 3 项目工作分析 3.1 项目计划与进度实施分析 3.1.1 开发进度 3.1.…

Hadoop3:MapReduce源码解读之Map阶段的Job任务提交流程(1)

3、Job工作机制源码解读 用之前wordcount案例进行源码阅读&#xff0c;debug断点打在Job任务提交时 提交任务前&#xff0c;建立客户单连接 如下图&#xff0c;可以看出&#xff0c;只有两个客户端提供者&#xff0c;一个是YarnClient&#xff0c;一个是LocalClient。 显然&a…

Atlassian企业日技术分享:AI在ITSM中的创新实践与应用、Jira服务管理平台AI功能介绍

2024年5月17日&#xff0c;Atlassian中国合作伙伴企业日活动在上海成功举办。活动以“AI协同 创未来——如何利用人工智能提升团队协作&#xff0c;加速产品交付”为主题&#xff0c;深入探讨了AI技术在团队协作与产品交付中的创新应用与实践&#xff0c;吸引了众多业内专家、企…

ARM服务器在云手机中可以提供哪些支持

ARM服务器作为云手机的底层支撑&#xff0c;在很多社媒APP或者电商APP平台都有着很多看不见的功劳&#xff0c;可以说ARM扮演着至关重要的底层支持角色&#xff1b; 首先&#xff0c;ARM 服务器为云手机提供了强大的计算能力基础。云手机需要处理大量的数据和复杂的运算&#x…

java的核心机制:JVM

JVM&#xff08;java virtual machine&#xff0c;java虚拟机&#xff09;&#xff1a;是一个虚拟的计算机&#xff0c;是java程序的运行环境。JVM具有指令集并使用不同的存储区域&#xff0c;负责执行指令&#xff0c;管理数据、内存、寄存器。 JVM功能1&#xff1a;实现java程…

什么,一不小心打造了一个基于大模型的操作系统

如果以大模型为Kernel, 形成一个新的操作系统&#xff0c;那么&#xff1a; 1. byzer-llm 是这个大模型操作系统的编程接口&#xff0c;有点类似Linux操作系统的C ABI。 2. byzer-retrieval 也被集成进 byzer- llm 接口里&#xff0c;算是大模型操作系统的文件系统&#xff0c…

如何删除电脑端口映射?

在使用电脑进行网络连接时&#xff0c;有时需要进行端口映射以实现不同设备之间的信息远程通信。当这些端口映射不再需要时&#xff0c;我们需要及时删除它们以确保网络的安全和稳定。本文将介绍如何删除电脑端口映射的方法。 操作系统自带的工具 大多数操作系统都提供了自带…

经典文献阅读之--Online Monocular Lane Mapping(使用Catmull-Rom样条曲线完成在线单目车道建图)

0. 简介 对于单目摄像头完成SLAM建图这类操作&#xff0c;对于自动驾驶行业非常重要&#xff0c;《Online Monocular Lane Mapping Using Catmull-Rom Spline》介绍了一种仅依靠单个摄像头和里程计生成基于样条的在线单目车道建图方法。我们提出的技术将车道关联过程建模为一个…

用QT6、QML、FFMPEG写一个有快进功能的影音播放程序

程序如图&#xff1a; 开发环境在ubuntu下&#xff0c;如果改windows下&#xff0c;也就改一下cmakelists.txt。windows下如何配置ffmpeg以前的文章有写&#xff0c;不再重复。 源程序如下&#xff1a; GitHub - wangz1155/ffmpegAudioThread: 用qt6&#xff0c;qml&#xff…

API测试工具

apifox 微信扫描登录 不推荐&#xff1a; Download Postman