Lambda表达式

本文介绍了Lambda表达式的概念、语法及应用场景。Lambda表达式是一种简洁的匿名函数定义方式,用于创建委托或表达式树类型。文章通过示例展示了如何使用Lambda表达式进行数据筛选、转换和排序。

"Lambda表达式"是一个匿名函数,它可以包含表达式和语句.并可用于创建委托或表达式目录树类型.

运算符

所有Lambda表达式都是用Lambda运算符=>,读做goes to.该运算符左边是输入参数,右边包含表达式或语句块.

Lambda表达式 x=>x*x读作 x goes to x 乘 x.可将此表达式分配给委托类型.

例:

protected void Page_Load(object sender, EventArgs e)
{
    cc c = x => x * x;

    Response.Write(c(12).ToString());
}

public delegate int cc(int i);

在上例中,请注意委托的参数是一个具有int类型的隐式类型输入参数,并返回int.在将lambda表达式转化为该类型的委托时,编译器会隐式的将该表达式中的参数转换为int.并返回一个int类型的值.

=>运算符具有与=运算符同级的优先级,并且是右结合运算符.

Lambda表达式

表达式在右边的Lambda表达式称为"Lambda表达式".采用以下基本形式.

(input parameters)=>expression

在lambda表达式只有一个参数时,括号才是可选的;否则括号是必须的.建议保留括号.

Lambda语句

Lambda语句与Lambda表达式相似,只是语句包含在大括号里.

(input parameters)=>{statement;}

Lambda语句的主体可以包含任意数量的语句.但是通常不会多与两句或三句.

Lambda表达式的类型推理

在编写Lambda时,通常不必为输入参数指定类型,因为编译器可以基于Lambda主体、基础委托类型以及C#3.0语言规范中描述的其他因素推断类型.

Lambda的一般规则如下:

1.lambda包含的参数数量必须与委托类型包含的参数数量一致

2.lambda中每个输入参数必须都能够隐式转换为其对应的委托参数

3.lambda的返回值必须能隐式的转换为委托的返回类型

例子:

bool GetStringWithFourCharacters(string str)
{
    return str.Length == 4;
}

protected void Page_Load(object sender, EventArgs e)
{
    string[] strs = new string[] { "abcd""bcde", "123s", "acee",  };

    //方法一、
    //创建Func<string,bool>的实例这种方式来获取方法与下面一种直接赋值的做法都可以.
    //Func<string, bool> func = new Func<string, bool>(GetStringWithFourCharacters);
    Func<string, bool> func = GetStringWithFourCharacters;
    IEnumerable<string> result = strs.Where<string>(func);

    //方法二、
    //IEnumerable<string> result = strs.Where<string>(delegate(string x) { return x.Length == 4; });

    //方法三、
    //IEnumerable<string> result = strs.Where<string>(x => x.Length == 4);
    foreach (var r in result)
    {
        Response.Write(r.ToString()+"<br/>");
    }
}

这三种方式都可以实将字符串数组中,为四个字符的字符串挑出来的功能.但是,哪一个最简单呢?显然第一个复杂些,第二个和第三个都比较简单.

其实第二个和第三个是等价的.建议使用第三种,上面的例子比较简单,只需要筛选出来即可,如果再要求都转成大写的呢? 再进行排序呢?

protected void Page_Load(object sender, EventArgs e)
{
    string[] strs = new string[] { "abcd", "bcde", "123s", "acee" };

    //方法二
    //IEnumerable<string> result = strs.Where<string>(delegate(string x) { return x.Length == 4; })
    //                                 .Select<string, string>(delegate(string x) { return x.ToUpper(); })
    //                                 .OrderBy<string, string>(x => x);
    
    //方法三
    IEnumerable<string> result = strs.Where<string>(x => x.Length == 4)
                                    .Select<string, string>(x => x.ToUpper())
                                    .OrderBy<string, string>(x => x);
    
    foreach (var r in result)
    {
        Response.Write(r.ToString()+"<br/>");
    }
}

从代码中,可以看到,使用Lambda表达式似乎更简单一些的

Lambda表达式在上例中的使用是:

    1. 选出只有4个字符的字符串
    2. 将字符串变成大写的
    3. 进行排序

转载于:https://www.cnblogs.com/oneword/archive/2010/09/07/1820704.html

标题基于Python的自主学习系统后端设计与实现AI更换标题第1章引言介绍自主学习系统的研究背景、意义、现状以及本文的研究方法和创新点。1.1研究背景与意义阐述自主学习系统在教育技术领域的重要性和应用价值。1.2国内外研究现状分析国内外在自主学习系统后端技术方面的研究进展。1.3研究方法与创新点概述本文采用Python技术栈的设计方法和系统创新点。第2章相关理论与技术总结自主学习系统后端开发的相关理论和技术基础。2.1自主学习系统理论阐述自主学习系统的定义、特征和理论基础。2.2Python后端技术栈介绍DjangoFlask等Python后端框架及其适用场景。2.3数据库技术讨论关系型和非关系型数据库在系统中的应用方案。第3章系统设计与实现详细介绍自主学习系统后端的设计方案和实现过程。3.1系统架构设计提出基于微服务的系统架构设计方案。3.2核心模块设计详细说明用户管理、学习资源管理、进度跟踪等核心模块设计。3.3关键技术实现阐述个性化推荐算法、学习行为分析等关键技术的实现。第4章系统测试与评估对系统进行功能测试和性能评估。4.1测试环境与方法介绍测试环境配置和采用的测试方法。4.2功能测试结果展示各功能模块的测试结果和问题修复情况。4.3性能评估分析分析系统在高并发等场景下的性能表现。第5章结论与展望总结研究成果并提出未来改进方向。5.1研究结论概括系统设计的主要成果和技术创新。5.2未来展望指出系统局限性并提出后续优化方向。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值