当前位置: 首页 > news >正文

Lambda详解 => {C#莱姆达表达式}

存在的意义

比如定义一个u8 num;的变量。那num只能赋值u8类型的数据。
如果赋值(方法)呢!使num能赋值方法类型而不是u8类型。这时莱姆达就来了。delegate委托建的变量可以接受方法类型,赋值的时候没必要每次都new方法,因为多数情况这方法只用一次,所以直接写方法(  ),如果有参数的话就加参数参数1,参数2,参数3,有了方法后,是不是还要有方法体,就不需要new了直接用莱姆达新建出方法体    => {    }
这样在  {   }   花括号里就可以添加语句了。 

//======================================

莱姆达的作用:

方法的参数是对象或者值类型, 要是参数的类型,是方法,怎么办?

函数的参数是方法类型怎么办呢?

void  run ( 方法  ff );

这类型是不是想不出来?

我们回顾一下,方法是怎么写的    void  main ( void){  ....  };

无名无参无返回怎么写?

()
{
  语句1;
  语句2;
}

我们已经知道委托类型delegate可以解决参数入口传方法的问题。

我们在写程序的时候都是先写好方法,然后再调用。

但我现在,正在写程序的时候就要调用方法,这种和尚要老婆的急事怎么办?

那就赶紧生个老婆出来,对,程序就是这么干的。一般这老婆就用一次,是一次性的(比如plc上电,后面我就再也用不到这个方法了)

这种一次性的方法,你给她起名字,已经没有意义了。 比如 delay_ms(10); 这种有名字的方法,你肯定是下次还想调用它,再延时10毫秒。

这种无名的方法 就是括号的左边没有名字      ()

有了无名方法,你想给她传参数怎么写?

当然和我们平时调用方法的习惯一样,在括号内直接填参数    ( 参数1,参数2,参数3 )

如果参数只有一个,那括号都可以懒的写了,直接省略。

那方法体怎么写?

我们用   =>  这个符号来告诉编译器,后面的是方法体

参数1  => { 语句1;语句2;}

到这里,实际就已经讲完了,你学会了吗?

 参数1 => 
{
   参数1=20;
   delay_ms(参数1);
}
 C => 
{
   C = 20;
   delay_ms( C );
}

原型:sayhallo cal2=delegate(int a,int b){ return  a+b;};
int  c=(int a,int b)=> { return  a+b;};//匿名的方法的参数
//================
public delegate T3 mydelegate<T1,T2,T3>(T1 A,T2 B);
mydelegate<T1,T2,T3> (T1 A,T2 B){return A+B;}//最后T3是返回类型

 莱姆达表达式是匿名函数的委托
在符号  =>  左边是填参数,如(int a,int b),如果只有一个参数,可以省略()括号;
例:delegate    at=a=>{方法1;方法2;方法n;return  a;};
例:delegate    at=(a,b)=>{return  a+b;};      //a和b是推断类型
例:delagate    at=()=>{return 1;};
例:delagate    at=(int a,int b)=>retun 0;     //只有一条语句可以省略{}花括号

=>  读  “goes  to”


Func< int,int,char,bool >  del2 = ( x,y,z)  =>   x>0; //名称是del2的方法,第1个参数是int,第3个参数是char,返回类型是bool类型。
注:最后一个类型是返回值类型,前面的是参数类型。可以用标识符代替,为推断类型。

方法的参数是方法:
public int 方法1(Func<int,int,int>method,int[]nums,int start,int to)
{

}
方法1(add,数组,0,2);//  方法1((a,b)=>a+b,数组,0,2);

无返回的系统委托:
Action< string > AT=(name)=> Console.WriteLine("结果是:");
原型:public delegate void Action < in T>( T obj);


 

 以上是几年前 我qq空间里做的笔记,这要是还学不会,我也没办法了,早点放弃 C# 吧。

相关文章:

  • 6207. 统计定界子数组的数目(每日一难phase3-2)
  • java毕业设计家居体验平台的设计与实现Mybatis+系统+数据库+调试部署
  • SpringBoot测试配置属性与启动web环境
  • 11. SpringCloud Alibaba Seata
  • C++模板之——类模板详解及代码示例
  • Python推荐系统和深度学习教程
  • 基于Matlab使用雷达资源管理有效跟踪多个机动目标仿真(附源码)
  • 医院管理系统/医院药品管理系统
  • 项目中使用到的Spring注解及其作用
  • Postgresql源码(86)varchar的创建与插入分析
  • VMware创建虚拟机及安装Linux操作系统
  • 基于51单片机的指纹考勤机密码锁系统
  • 科研小白上路的必备工具链
  • HTML5七夕情人节表白代码 (动态3D相册) HTML+CSS+JS
  • 【云原生 | 从零开始学istio】一、Istio介绍—服务网格
  • 【Leetcode】101. 对称二叉树
  • Akka系列(七):Actor持久化之Akka persistence
  • AngularJS指令开发(1)——参数详解
  • iOS筛选菜单、分段选择器、导航栏、悬浮窗、转场动画、启动视频等源码
  • Javascripit类型转换比较那点事儿,双等号(==)
  • js中forEach回调同异步问题
  • Linux gpio口使用方法
  • Spark RDD学习: aggregate函数
  • Storybook 5.0正式发布:有史以来变化最大的版本\n
  • 对象管理器(defineProperty)学习笔记
  • 记一次和乔布斯合作最难忘的经历
  • 项目实战-Api的解决方案
  • 我们雇佣了一只大猴子...
  • 新年再起“裁员潮”,“钢铁侠”马斯克要一举裁掉SpaceX 600余名员工 ...
  • ​LeetCode解法汇总2808. 使循环数组所有元素相等的最少秒数
  • ​渐进式Web应用PWA的未来
  • ​软考-高级-信息系统项目管理师教程 第四版【第14章-项目沟通管理-思维导图】​
  • #define用法
  • #NOIP 2014# day.1 T3 飞扬的小鸟 bird
  • $$$$GB2312-80区位编码表$$$$
  • (二)Eureka服务搭建,服务注册,服务发现
  • (二)fiber的基本认识
  • (附源码)springboot金融新闻信息服务系统 毕业设计651450
  • (入门自用)--C++--抽象类--多态原理--虚表--1020
  • (转)h264中avc和flv数据的解析
  • (转)Unity3DUnity3D在android下调试
  • *** 2003
  • *1 计算机基础和操作系统基础及几大协议
  • .mkp勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .NET Micro Framework初体验(二)
  • .netcore如何运行环境安装到Linux服务器
  • .NET中两种OCR方式对比
  • @Autowired注解的实现原理
  • @Bean注解详解
  • @modelattribute注解用postman测试怎么传参_接口测试之问题挖掘
  • [ 渗透工具篇 ] 一篇文章让你掌握神奇的shuize -- 信息收集自动化工具
  • []sim300 GPRS数据收发程序
  • [1525]字符统计2 (哈希)SDUT
  • [2023年]-hadoop面试真题(一)
  • [30期] 我的学习方法