C# Lambda表达式

Lambda表达式详解(C#) Lambda表达式可以采用以下任意一种形式的表达式: 1.表达式Lambda,表达式为其主体: (input-parameters) => expression 2.语句Lambda,语句块作为其主体: (input-parameters) => {<sequence-of-statements>} 使用Lambda声明运算符=>,从其主体中分离Lambda参数列表。若要创建Lambda表达式,需要在Lambda运算符左侧指定输入参数(如果有参数时),然后在另一侧输入表达式 阅读详情

委托如下:

delegate int calculator(int x, int y); //委托类型
        static void Main()
        {
            calculator cal = new calculator(Adding);
            int He = cal(1, 1);
            Console.Write(He);
        }

        /// <summary>
        /// 加法
        /// </summary>
        /// <param name="x"></param>
        /// <param name="y"></param>
        /// <returns></returns>
        public static int Adding(int x, int y)
        {
            return x + y;
        }
匿名方法如下:

delegate int calculator(int x, int y); //委托
        static void Main()
        {
            calculator cal = delegate(int num1,int num2)
            {
                return num1 + num2;
            };
            int he = cal(1, 1);
            Console.Write(he);
        }

下面我们来讲解Lambda表达式:

 按照上边的加法,我们用Lambda表达式来实现,代码如下:

delegate int calculator(int x, int y); //委托类型
        static void Main()
        {
            calculator cal = (x, y) => x + y;//Lambda表达式,大家发现没有,代码一个比一个简洁
            int he = cal(1, 1);
            Console.Write(he);
        }

那么我们详细讲讲Lambda表达式:

若要创建 Lambda 表达式,需要在 Lambda 运算符 => 左侧指定输入参数(如果有),然后在另一侧输入表达式或语句块。 例如,lambda 表达式 x => x * x 指定名为 x 的参数并返回 x 的平方值。 如上面的示例所示,你可以将此表达式分配给委托类型:

"Lambda表达式"是一个特殊的匿名函数,是一种高效的类似于函数式编程的表达式,Lambda简化了开发中需要编写的代码量。它可以包含表达式和语句,并且可用于创建委托或表达式目录树类型,支持带有可绑定到委托或表达式树的输入参数的内联表达式。所有Lambda表达式都使用Lambda运算符=>,该运算符读作"goes to"。Lambda运算符的左边是输入参数(如果有),右边是表达式或语句块。Lambda表达式x => x * x读作"x goes to x times x"。举几个简单的Lambda表达式,如下:

delegate bool MyBol(int x, int y);
        delegate bool MyBol_2(int x, string y);
        delegate int calculator(int x, int y); //委托类型
        delegate void VS();
        static void Main()
        {
            MyBol Bol = (x, y) => x == y;
            MyBol_2 Bol_2 = (x, s) => s.Length > x;
            calculator C = (X, Y) => X * Y;
            VS S = () => Console.Write("我是无参数Labada表达式");
            //
            int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };
            int oddNumbers = numbers.Count(n => n % 2 == 1);
            //
            List<People> people = LoadData();//初始化
            IEnumerable<People> results = people.Where(delegate(People p) { return p.age > 20; });
        }

        private static List<People> LoadData()
        {
            List<People> people = new List<People>();   //创建泛型对象  
            People p1 = new People(21, "guojing");       //创建一个对象  
            People p2 = new People(21, "wujunmin");     //创建一个对象  
            People p3 = new People(20, "muqing");       //创建一个对象  
            People p4 = new People(23, "lupan");        //创建一个对象  
            people.Add(p1);                     //添加一个对象  
            people.Add(p2);                     //添加一个对象  
            people.Add(p3);                     //添加一个对象  
            people.Add(p4);
            return people;
        }

    }

    public class People
    {
        public int age { get; set; }                //设置属性  
        public string name { get; set; }            //设置属性  
        public People(int age, string name)      //设置属性(构造函数构造)  
        {
            this.age = age;                 //初始化属性值age  
            this.name = name;               //初始化属性值name  
        }
    }

Func<T>委托

 T 是参数类型,这是一个泛型类型的委托,用起来很方便的。

 先上例子

static void Main(string[] args)
        {
            Func<int, string> gwl = p => p + 10 + "--返回类型为string";            
            Console.WriteLine(gwl(10) + "");   //打印‘20--返回类型为string’,z对应参数b,p对应参数a
            Console.ReadKey();
        }
说明:我们可以看到,这里的p为int 类型参数, 然而lambda主体返回的是string类型的。


再上一个例子

static void Main(string[] args)
        {
            Func<int, int, bool> gwl = (p, j) =>
                {
                    if (p + j == 10)
                    {
                        return true;
                    }
                    return false;
                };
            Console.WriteLine(gwl(5,5) + "");   //打印‘True’,z对应参数b,p对应参数a
            Console.ReadKey();
        }


说明:从这个例子,我们能看到,p为int类型,j为int类型,返回值为bool类型。

至此,如果上边的内容都能看懂,那么Lambda也就没什么了!



原作者写的很好去看看吧

-http://www.cnblogs.com/chenwolong/p/Lambda.html

[深入学习C#]匿名函数、委托和Lambda表达式 匿名函数  匿名函数(Anonymous Function)是表示“内联”方法定义的表达式。匿名函数本身及其内部没有值或者类型,但是可以转换为兼容的委托或者表达式树类型(了解详情)。匿名函数转换的计算取决于转换的目标类型:如果是委托类型,则转换计算为引用匿名函数所定义的方法的委托;如果是表达式树类型,则转换将计算以对象结构形式表示方法结构的表达式树。   匿名函数有两种语法风格:Lambda表达式 阅读详情

相关推荐

浅析C#中的Lambda表达式

上文中用了一点篇幅讲述了匿名方法的使用。自从C#3.0开始,就可以使用一种新语法把视线代码赋予委托,即Lambda表达式。只要有委托参数类型的地方,就可以使用Lambda表达式。上文中使用匿名方法的例子可以改为使用Lambda表达式。语法: Lambda表达式的定义方式为:“([参数列表]) => 表达式”。运算符“=>”是一种与赋值运算“=”具有相同优先级的右结合运算符,在英语里读作:“goes

一蓑烟雨任平生 也无风雨也无晴 3861

怎么用lambda表达式写多条件查询

Lambda表达式是一种简洁的函数式编程语法,可以用来实现多条件查询。在 Python 中,你可以使用 filter() 函数和 lambda 表达式配合实现多条件查询。 例如,假设你有一个名为 person_list 的列表,该列表中包含了若干个字典,每个字典表示一个人的信息,包括年龄和性别等。如果你想找出所有年龄大于30岁且性别为女性的人,你可以使用以下代码实现: result = filte...

weixin_42596214的博客 1640

关于C#的lambda表达式

什么是Lambda表达式呢? Lambda表达式(lambda expression)是一个匿名函数,它可以包含表达式和语句,并且可用于创建委托或表达式目录树类型。Lambda表达式基于数学中的λ演算得名,直接对应于其中的lambda抽象(lambda abstraction),是一个匿名函数,即没有函数名的函数。Lambda表达式可以表示闭包。 所有 Lambda 表达式都使用 Lambda...

陈小白的博客 589

C# Lambda表达式各种用法总结

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 C# Lambda表达式前言一、使用Lambda 之前的示例二、使用Lambda 之后的示例然而Lambda可以将表达式更精简...另外两种Lambda表达式简化语法总结 前言 C# Lambda 作用 Lambda表达式可用于简化C#中的匿名语法 我们通过使用Lambda表达式前后委托的语法做比较 一、使用Lambda 之前的示例 此示例为委托的匿名方法声明不带Lambda表达式 namespace ConsoleApp3 { .

PittDing的博客 7703

从零到一:如何用YOLOv8和PyQt5打造一个高效的路面坑洞检测系统

本文详细介绍了如何利用YOLOv8和PyQt5开发一个高效的路面坑洞检测系统。从环境配置、数据采集标注到模型训练优化,再到PyQt5界面开发与系统集成,提供了完整的实战指南。该系统结合深度学习技术,显著提升了道路检测的准确性和效率,适用于各类道路维护场景。

weixin_29047919的博客 308

从TL431光耦到集成隔离器:3种反激电源反馈方案全对比,你的项目到底该选哪个?

本文深入对比了反激电源设计中TL431光耦、集成隔离器和原边反馈三种主流反馈方案的优缺点,帮助开发者在电源设计中选择最适合的方案。从精度、成本、隔离等级等多维度分析,为反激式(Flyback)拓扑的应用提供实用选型指南。

weixin_30536513的博客 399

c# list<T> lambda表达式 取某一属性并去重

方法一 lambda+ Distinct() //方法一: //.Select(t => t.posType)-- 查询列表里所有的posType属性 //.Distinct()--值类型List去重 //.ToList()--转换为 List<int> 类型 List<int> listPosType = magList.Select(t => t.posType).Distinct().ToList(); 方法.

尽力而行 4770

一文读懂,WMS仓库管理系统模块功能

对于仓库管理人员来说,仓储管理是一件需要十分负责、又精细化的工作。

深蓝易网的博客 5219

C#——Lambda 表达式

C#——Lambda 表达式 “Lambda 表达式”是采用以下任意一种形式的表达式: 表达式 lambda,表达式为其主体: (input-parameters) => expression 语句 lambda,语句块作为其主体: (input-parameters) => { <sequence-of-statements> } 使用 lambda 声明运算符=> 从其主体中分离 lambda 参数列表。 若要创建 Lambda 表达式,需要在 Lambda 运

weixin_43945471的博客 6893

别再为倍福EL6021/EL6022的RS485接线头疼了!手把手教你硬件跳线与软件配置(附Modbus RTU主站例程)

本文详细解析了倍福EL6021/EL6022模块的RS485硬件跳线与软件配置方法,包括Modbus RTU主站编程实战。从端子定义、跳线操作到TwinCAT 3环境设置,提供完整的通信例程和故障排查技巧,帮助工程师快速解决工业现场通信问题。

weixin_30634661的博客 591

Clarity 3D Layout

Clarity 3D Layout Clarity 3D layout是3D 全波电磁场模型提取工具,它可以导入已经设计好的PCB文件也可以直接在Clarity 3D layout创建版图进行3D 全波电磁场模型提取。

m0_53280471的博客 5484

c#中Lambda表达式

在C#的语法中有一种比较特殊的写法,叫做Lambda表达式,这种表达式的写法在于你查询数据的时候直接是使用以下箭头的形式来表示查询语句的:=>。例如,我们要查找学生的List<Student>集合中班级编号为1001的所有学生数据,我们即可用Studentlist.Where(t=>t.ClassCode=‘1001’)语句来直接完成,无需再写繁琐的foreach语句或者for循环。5 查询班级编号为1001的班级下面的姓氏为【李】的同学的所有集合,并按照学生的出生日期从小到大排列。// 查找第一个偶数。

baidu_39458245的博客 3632

嵌入式开发必备:aarch64-linux-gnu-gcc交叉编译工具链保姆级安装指南(含常见错误解决)

本文详细介绍了aarch64-linux-gnu-gcc交叉编译工具链的安装与配置方法,涵盖从系统软件源安装到Linaro二进制包部署的全流程。针对嵌入式开发中常见的依赖错误、版本冲突等问题提供实用解决方案,并分享性能优化技巧与项目集成经验,帮助开发者高效完成ARM64设备的跨平台开发。

yoga7的博客 1030

C# Lambda表达式总结篇

C# Lambda表达式详细总结 (一)输入参数 在Lambda表达式中,输入参数是Lambda运算符的左边部分。它包含参数的数量可以为0、1或者多个。只有当输入参数为1时,Lambda表达式左边的一对小括弧才可以省略。输入参数的数量大于或者等于2时,Lambda表达式左边的一对小括弧中的多个参数质检使用逗号(,)分割。 示例1 下面创建一个Lambda表达式,它的输入参数的数量为0.该表达式将显示“This is a Lambda expression”字符串。 [csharp] view plain

铁蛋的博客 2888

ROS探索篇(一)在Gazebo中实现移动机器人仿真与环境搭建

$x+y=z$

weixin_52029211的博客 4621

在Cursor IDE中集成Datadog监控:自然语言查询实战指南

在云原生和微服务架构中,可观测性(Observability)已成为保障系统稳定性的核心技术支柱。其核心原理是通过日志(Logs)、指标(Metrics)和追踪(Traces)三大支柱,实时采集并呈现系统的运行状态。这项技术的价值在于,它让开发者能够透视复杂的分布式系统,快速定位性能瓶颈与故障根因。在实际的工程实践中,开发人员常常需要在编码环境与监控平台之间频繁切换,这种上下文切换严重影响了排障效率。本文聚焦于如何利用Model Context Protocol(MCP),将强大的Datadog可观测性平台

weixin_42519772的博客 348

c#中lambda表达式_如何在C#中使用Lambda表达式

c#中lambda表达式 Lambda表达式最初是在.NET 3.5中引入的,同时提供了语言集成查询(LINQ)。 Lambda表达式就像匿名方法,但具有更大的灵活性。 使用lambda表达式时,无需指定输入的类型。 因此,lambda表达式提供了一种更简短的表示匿名方法的方法。 在本文中,我们将研究如何在C#中使用lambda表达式。 若要使用本文提供的代码示例,您应该在系统中安装Visu...

cxu0262的博客 3149

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

C# Lambda 表达式

C# Lambda 表达式 Lambda 表达式(lambda expression)是一个匿名函数,Lambda 表达式基于数学中的λ演算得名,直接对应于其中的 lambda 抽象(lambda abstraction),是一个匿名函数,即没有函数 名的函数。 C#的 Lambda 表达式都使用 Lambda 运算符 =>,该运算符读为“goes to”。语法如下: (object argOne, object argTwo) => {/*Your statement goes here*

qq_57767445的博客 3297

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

C#中Lambda表达式总结

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

你要明白,任何问题都不是孤立存在的,一定有人曾经遇到过,并且已经有更好的解决办法了,只是我还不知道。我不应该在黑暗中独自前行,去重新发明轮子,也许我的顿悟,只是别人的基本功!我应该要站在巨人的肩膀上,学习更成熟的经验和方法,然后再来解决这个问题 4240

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

C# Lambda 表达式 详解

C# Lambda 表达式 详解

鲤籽鲲的博客 3082

C# Lambda表达式详细总结

(一)输入参数 在Lambda表达式中,输入参数是Lambda运算符的左边部分。它包含参数的数量可以为0、1或者多个。只有当输入参数为1时,Lambda表达式左边的一对小括弧才可以省略。输入参数的数量大于或者等于2时,Lambda表达式左边的一对小括弧中的多个参数质检使用逗号(,)分割。 示例1 下面创建一个Lambda表达式,它的输入参数的数量为0.该表达式将显示“This i

博客 4万+

C#中的Lambda表达式

在看C#中的Lambda表达式之前,先来看一个概念:匿名方法。学过Java的亲们,可能对这个概念比较了解。Java JDK8中也引入了Lambda表达式。 下面看看C#中的匿名函数。下面是一个实例: namespace ConsoleApplication {     class AnonymousMethod     {         public static void Main()

给永远比拿愉快 1883

C#的lambda表达式与Linq

C# Lambda表达式与Linq语句和表达式+EntityFramework Core的使用

hccee的博客 1479
上一篇: 关于.net连接数据获取数据失败的原因
下一篇: oracle大表添加字段default经验分享
BikeRiver
博客等级 码龄10年 11粉丝 33原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值