C# Lambda Expression概念浅析

2023-11-02

C# Lambda Expressions是什么呢?我们在处理数据库数据删除的操作的时候会碰到它,那么具体的C# Lambda Expressions是什么以及含义和使用是什么情况呢?那么下面我来看看具体的内容。  
      1.关于C# Lambda Expressions:  
      一个Lambda Expression (译为Lambda式) 就是一个包含若干表达式和语句的匿名函数。可以被用作创建委托对象或表达式树类型。所有的Lambda式都使用操作符“=>“,表示“goes to (转变为)”。操作符左边部分是输入参数表,右边部分是表达式或语句块。x => x * x 读成“x转变为x 乘x”。Lambda式可以被赋值给一个委托类型:  
      C# Lambda实例1:  delegateintdel(inti); [/ol]
      也可以被用于创建一个表达式树类型:  
      C# Lambda实例2:  usingSystem.Linq.Expressions; [/ol]
      操作符“=>”具有和“=”一样的运算优先级,且为右相关(右边先执行)。  
      在例1中,我们注意到委托的定义中有一个int类型的输入参数以及int类型的返回值。例子中的Lambda式中并没有任何类型的声明。是编译器为我们做了相应的隐式数据类型转换:输入参数类型能够从委托的输入参数类型隐式转换,返回类型能够被隐式转换为委托的返回类型。  
      Lambda式不允许作为“is”和“as”操作符的左操作数出现。也就是  delmyDelegate=x=>x*xasstring;//error[/ol]
      所有对于匿名方法的约束也同样适用于Lambda式。请参阅Anonymous Methods (C# Programming Guide).  
      2.从表达式理解C# Lambda Expressions  
      由一个计算表达式组成的一个Lambda式称之为表达式Lambda。表达式Lambda常被用于构造表达式树。一个表达式Lambda返回计算表达式运算的结果。基本结构如下:  (inputparameters)=>expression [/ol]
      上面这段代码在Lambda式中调用了一个方法。需要注意的是,如果在创建会被其他方使用的表达式树的时候,不宜在Lambda式中执行方法调用。比如:在SQL Server内执行。  
      一般来说,让一个方法在原先设计的上下文环境以外执行没有意义,也不能真正工作。  
      3.从语句理解C# Lambda Expressions  
      语句Lambda和表达式Lambda非常相似,只是语句被包含在大括号内:  (inputparameters)=>{statement;}[/ol]
      大括号中的语句可以是任意多条,也可以写成多行(定义一个Lambda式也就是在定义一个匿名方法):  TestDelegatemyDel=n=>{strings=n+""+"World"; [/ol]
      当然语句Lambda跟匿名方法一样,无法用于创建表达式树。  
      4.C# Lambda Expressions之类型猜测  
      当编写一个Lambda式的时候,我们通常不需要明确指定输入参数的类型。因为编译器会根据Lambda体的实现,以及委托的定义来猜测类型。  
      举例:如果要从一个List中删除小于100的元素  lst.RemoveAll(i=>i
      通常的猜测规则如下:  
      ◆Lambda式必须包含与委托定义中相等数量的输入参数;  
      ◆每个Lambda式的输入参数必须能够隐式转换成委托定义中所要求的输入参数;  
      ◆Lambda式的返回值必须能够隐式转换成委托定义中的返回值。  
      注意:由于目前在common type system中还没有一个“Lambda式类型”的类型。如果在有些场合提到“Lambda式的类型”,那通常表示委托的定义或者是Expression类型。  
      5.C# Lambda Expressions变量作用域  
      在Lambda式定义中可以引用外部变量。只要是在定义处能够访问到的变量,都可以在Lambda式中引用。  
      Lambda式的定义仅仅是定义一个匿名方法,最终会生成一个委托对象。外部变量的引用将被“捕获”到委托对象内部,将会伴随委托对象的整个生命周期。在委托对象生命周期结束之前该变量都不会被垃圾回收。就算外部变量已经超过了原来的作用域,也还能继续在Lambda式中使用。所有会被引用的外部变量必须在Lambda式定义之前被显式赋值。见下例  delegateboolD(); [/ol]
      下面是关于变量作用域的规则:  
      ◆被“捕获”的变量在委托的生命周期结束前都不会被垃圾回收;  
      ◆在Lambda式内部定义的变量对外不可见;  
      ◆Lambda式无法直接捕获一个具有ref或out描述的参数变量;  
      ◆Lambda式中的return语句不会导致当前所在的方法返回;  
      ◆Lambda式中不允许包含会导致跳当前执行范围的goto,break 或 continue语句。  
      6.C# Lambda Expressions学习的总结  
      Lambda式可以说就是另外一种形式的匿名方法。用在某些地方,会使代码更加简洁。定义一个Lambda式本质上就是定义一个委托的实现体。  
      原文来自博客园:http://www.cnblogs.com/smwikipedia/archive/2009/05/06/1450825.html  
      C# Lambda Expressions的相关内容就向你介绍到这里,希望对你了解和学习掌握C# Lambda Expressions有所帮助,之后我们会继续学习C# Lambda Expressions的一些应用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C# Lambda Expression概念浅析 的相关文章

随机推荐

  • aop统一日志输出controller出入参及部分参数

    输出使用的jackson 其中获取iputil放在另一篇文章 gt gt gt gt IpUtil获取ip author cy c date 2022 5 19 16 28 统一日志处理 Component Aspect public cl
  • JTS:04 读取数据库数据

    版本 org locationtech jts jts core 1 19 0 链接 github 数据库 创建数据库方式 postgresql 使用postgis插件 kartoza postgis 15 3 3 使用docker容器 创
  • C++中#pragma once与#ifndef的区别

    为了避免同一个文件被include 多次 可以使用两种方式 1 方式一 ifndef SOMEFILE H define SOMEFILE H 声明语句 endif 2 方式二 pragma once 声明语句 两者的区别 ifndef方式
  • Struts2识别与漏洞利用

    Struts2框架识别 1 通过网页后缀来进行判断 如 do或者 action Struts2漏洞验证 Struts2 045漏洞介绍 安恒信息安全研究院WEBIN实验室高级安全研究员nike zheng发现著名J2EE框架 Struts2
  • 3.【Python】分类算法—Softmax Regression

    3 Python 分类算法 Softmax Regression 文章目录 3 Python 分类算法 Softmax Regression 前言 一 Softmax Regression模型 1 Softmax Regression模型
  • 2023华为od机试真题B卷Python【矩阵里的非一元素】

    题目 假设存在一个m n的二维数组 其成员取值范围为0 1和2 1具有同化特性 它具体的同花步骤是 每经过1秒 如果其上下左右值为0 那么修改为1 而值为2的元素不会有任何变化 初始时 将数组的 0 0 元素修改为1 经过足够长的时间后 需
  • 应用于SSVEP脑电信号识别的CCA算法

    应用于SSVEP脑电信号识别的CCA算法 1 SSVEP信号 2 应用于SSVEP信号的CCA算法 1 SSVEP信号 SSVEP是指当受到一个固定频率的视觉刺激的时候 人的大脑视觉皮层会产生一个连续的与刺激频率有关 刺激频率的基频或倍频处
  • phpstudy站点404访问遭到拒绝 首页可以访问 接口不能访问

    问题描述 新站站点可以使用 关机再开不能使用 新建站点 不能访问接口 可以访问首页 接口404 直接入正题 入口文件夹里有一个文件 htaccess 这个文件打开如果没有内容 问题就出现在这
  • 清华汪玉创始公司浮出水面,要做大模型一体机,仍是“深鉴式”师生组合拳...

    衡宇 发自 凹非寺量子位 公众号 QbitAI 清华大学电子工程系系主任汪玉 再一次躬行实践 产学结合 具体领域 与大模型紧密相关 量子位获悉 汪玉担任创始人身份的新公司无问芯穹 主要做大模型推理用一体机 以及工具链软件 公司旨在解决大模型
  • J-Tech Talk | 编写Dockerfile的最佳实践

    J Tech Talk 由 Jina AI 社区为大家带来的技术分享 工程师们将深入细节地讲解具体的问题 分享 Jina AI 在开发过程中所积累的经验 不论是个人开发者还是企业 上云已经成为基本的需求 使用 Dockerfile 构建 D
  • debug assertion failed 的一种解决方法

    在使用C 编写程序时 使用到了如同以下的程序 scene addItem originalPixmap 出现debug assertion failed错误 查找原因 发现代码并没有问题 罪魁祸首是 变量 scene 的声明在 origin
  • Centos搭建k8s

    在CentOS 7上搭建Kubernetes集群 kubeadm官方文档 https blog 51cto com zhangxueliang 4952945 前置步骤 所有结点 CentOS 7 9 物理机或虚拟机三台 CPU 内核数量大
  • MATLAB常用函数汇总

    一 基本函数 函数 作用 举栗子 clear 清除工作区中的所有变量 clc 清除命令行中的所有代码 help 函数名 或 doc 函数名 查找函数帮助 syms 定义符号变量 syms x y sym f 定义符号表达式 sym x y
  • TVM的安装过程

    最近在看深度学习编译器相关的工作 其中FlexTensor给我留下了比较深刻的印象 加上这项工作是开源的 所以想看看这份工作的源码 首先是怎么把工程跑起来 FlexTensor倚仗TVM做代码生成 所以首先得安装TVM 首先给出官方网站的安
  • 人生四大喜事是什么?

    一辈子 或长或短 总是要经历很多事情 古人很聪明 把人生简单明了化 归结了最重要的四大喜事和四大悲事 四大喜事 久旱逢甘雨 他乡遇故知 洞房花烛夜 金榜题名时 四大悲事 幼年丧母 少年丧父 中年丧妻 老年丧子 人生四大喜事 久旱逢甘雨 他乡
  • 覆盖的面积【HDU-1255】【扫描线】

    题目链接 超级好的一道题的说 虽然看了别人的思路才有了的的想法 我好弱啊 题目求的是覆盖两次以上的区间的面积大小 那么我们要怎么做 一样的 Covercnt gt 2 就得到答案 不 不行 因为若是我们之前放进去一个小区间 然后再放一个包含
  • 留言赠书|因果推断与机器学习,终于有本书能讲明白啦!

    随着大数据时代的来临 机器学习技术突飞猛进 并且在人类社会中扮演越来越重要的角色 例如 你可能已经习惯了每天使用谷歌 百度 Bing等搜索引擎查找信息 或者在电商网站和视频网站的推荐系统 以及利用谷歌 百度等网站提供的机器翻译学习外语 这些
  • weak和assign的区别-正确使用weak、assign

    一 区别 1 修饰变量类型的区别 weak 只可以修饰对象 如果修饰基本数据类型 编译器会报错 Property with weak attribute must be of object type assign 可修饰对象 和基本数据类型
  • 11、若依分布式事务

    数据库事务的基本概念 ACID 原子性 Atomicity 操作这些指令时 要么全部执行成功 要么全部不执行 只要其中一个指令执行失败 所有的指令都执行失败 数据进行回滚 回到执行指令前的数据状态 要么执行 要么不执行 一致性 Consis
  • C# Lambda Expression概念浅析

    C Lambda Expressions是什么呢 我们在处理数据库数据删除的操作的时候会碰到它 那么具体的C Lambda Expressions是什么以及含义和使用是什么情况呢 那么下面我来看看具体的内容 1 关于C Lambda Exp