拉姆达表达式(Lambda Expressions)[通俗易懂]

拉姆达表达式(Lambda Expressions)[通俗易懂]让我们先看一个简单的拉姆达表达式:x=>x/2这个表达式的意思是:x为参数,对x进行相应的操作后的结果作为返回值。通过这个拉姆达表达式,我们可以看到: 这个表达式没有任何类型信息,但这并不代表拉姆达表达式是和类型无关的。在实际运用上,编译器会根据表达式的上下文判断上述x的类型及返回值的类型。例如: usingSystem;usingS

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

让我们先看一个简单的拉姆达表达式:

x=>x/2

这个表达式的意思是:x为参数,对x进行相应的操作后的结果作为返回值。

通过这个拉姆达表达式,我们可以看到:

 

这个表达式没有任何类型信息,但这并不代表拉姆达表达式是和类型无关的。在实际运用上,编译器会根据表达式的上下文判断上述x的类型及返回值的类型。例如:

 

using System;
using System.Linq;
public class LambdaTest
{

     static void Main() {

     Func<int, double> expr = x => x / 2;
     int someNumber = 9;
     Console.WriteLine( “Result: {0}”, expr(someNumber) );
  }
}

 

上述代码中,加粗部分为拉姆达表达式。Func<>为 delegate System.Func<T,TResult>

上述运行结果为:Result:4

根据我们学习的数学知识,9/2应当结果是4.5,为什么上述结果会是4而不是4.5呢?是因为x是整型,x/2的结果也是整型,虽然在上述我们拉姆达表达式中,我们指明结果是double,但x/2这个表达式,由于x是整型,故计算出来的结果已被截掉小数,然后再转换为double,故结果是4,而不是4.5

 

要使结果是4.5,则只需定义上述相关语句为 Func<double,double> expr = x => x / 2 即可。

 

无参数的拉姆达表达式:

using System;
using System.Linq;
public class LambdaTest
{

static void Main() {

int counter = 0;
WriteStream( () => counter++ );
Console.WriteLine( “Final value of counter: {0}”,counter );

}
static void WriteStream( Func<int> counter ) {

   for( int i = 0; i < 10; ++i ) {

    Console.Write( “{0}, “, counter() );
  }
    Console.WriteLine();
  }
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/191995.html原文链接:https://javaforall.net

(0)
上一篇 2026年1月21日 上午11:43
下一篇 2026年1月21日 下午12:15


相关推荐

  • 关于 jQuery delegate , undelegate

    关于 jQuery delegate , undelegate没啥好说的,看代码吧!jQuery版本:1.71浏览器版本:chrome211<body>23<ulclass=”a-list”>4<li><ahref=”javascript:;”>test1</a></li>5&…

    2022年10月7日
    7
  • 线段树入门 敌兵布阵

    线段树入门 敌兵布阵

    2021年9月27日
    53
  • mybatis 数据权限插件_mybatis查询大量数据

    mybatis 数据权限插件_mybatis查询大量数据数据权限管理中心由于公司大部分项目都是使用mybatis,也是使用mybatis的拦截器进行分页处理,所以技术上也直接选择从拦截器入手需求场景第一种场景:行级数据处理原sql:selectid,username,regionfromsys_user;需要封装成:select*from(selectid,username,regionfromsys_user)wh…

    2025年9月1日
    9
  • @PostConstruct注解

    @PostConstruct注解好多人以为是Spring提供的。其实是Java自己的注解。Java中该注解的说明:@PostConstruct该注解被用来修饰一个非静态的void()方法。被@PostConstruct修饰的方法会在服务器加载Servlet的时候运行,并且只会被服务器执行一次。PostConstruct在构造函数之后执行,init()方法之前执行。通常我们会是在Spring…

    2022年4月5日
    181
  • 华硕主板装系统蓝屏_华硕主板装系统蓝屏怎样设置bios?

    华硕主板装系统蓝屏_华硕主板装系统蓝屏怎样设置bios?你好很多问题都会导致蓝屏的 需要通过蓝屏代码来判断问题原因 建议你记录下蓝屏时的代码来帮你判断 这里列举几个典型的蓝屏故障的原因和解决办法 一 0X0000000A 这个蓝屏代码和硬件无关 是驱动和软件有冲突造成的 最早发现这个代码是因为公司的 DELL 机器的 USB 键盘和 2007 的键盘加密程序有冲突发现的这个问题 也在 IBMT 系列笔记本上装驱动失误产生过 如果您的机器蓝屏了 而且每次都是这个代码

    2026年3月26日
    1
  • 科大讯飞如何查询设备激活状态?

    科大讯飞如何查询设备激活状态?

    2026年3月14日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号