Lambda表达式教程
本文提供全流程,中文翻译。
Chinar 坚持将简单的生活方式,带给世人!
(拥有更好的阅读体验 —— 高分辨率用户请根据需求调整网页缩放比例) |
Chinar —— 心分享、心创新!
助力快速理解 Lambda 表达式的用法、规范
为新手节省宝贵的时间,避免采坑! |
- 1
- 2
- 3
- Empty return value —— 空返回值函数
- 4
- Lambda Statement —— 表达式 语句
- 5
- 6
- 7
- Toggle AddListener Lambda —— 动态添加监听方法 Lambda
- 支持
- May Be —— 搞开发,总有一天要做的事!
全文高清图片,点击即可放大观看 (很多人竟然不知道)
1
Lambda —— 表达式
Lambda 表达式是一个匿名函数,用它可以高效简化代码,常用作委托,回调
Lambda 表达式都使用运算符=>
,所以当你见到这个符号,基本上就是一个 Lambda 表达式
Lambda 运算符的左边是输入参数(),=>
,右边是表达式或语句块
Lambda 表达式,是可以访问到外部变量的
可以将此表达式分配给委托类型
class Chinar{static int MethodA(int a, int b){return a &#43; b;}static void Main(string[] args){Func<int, int, int> lambda &#61; (args1, args2) &#61;> { return args1 &#43; args2; };Console.WriteLine("表达式1&#xff1a;" &#43; lambda(100, 1));Func<int, int> lambda2 &#61; a &#61;> a * a;Console.WriteLine("表达式2&#xff1a;" &#43; lambda2(9));Console.ReadLine();}}
2
Parameter —— 参数
Lambda 只有一个参数时&#xff0c;可以省略括号
如果多个参数&#xff0c;则必须加括号&#xff0c;并且用&#xff0c;
隔开
单参数 &#xff0c;匿名函数&#xff1a;
x &#61;> x * x;
多参数 &#xff0c;匿名函数&#xff1a;
(x, y) &#61;> x &#61;&#61; y;//传入参数为&#xff1a;x,y&#xff0c;返回值为 bool 值
3
Empty return value —— 空返回值函数
当我们所需的函数返回值为空时&#xff0c;需要指定空返回值
无参数 &#xff0c;无返回值&#xff0c;匿名函数&#xff1a;
using UnityEngine;public class ChinarLambda : MonoBehaviour
{delegate void ChinarDelegate(); ChinarDelegate cd; void Start(){cd &#61; () &#61;> { print("Chinar"); }; cd(); }
}
运行结果&#xff1a;打印
Chinar
有参数 &#xff0c;无返回值&#xff0c;匿名函数&#xff1a;
using UnityEngine;public class ChinarLambda : MonoBehaviour
{delegate void ChinarDelegate(int a, int b); ChinarDelegate cd; void Start(){cd &#61; (a, b) &#61;>{print(a); print(b);}; cd(1, 2); }
}
运行结果&#xff1a;打印
1
2
4
Lambda Statement —— 表达式 语句
当表达式&#xff0c;函数体有多个语句时&#xff0c;只需要将所有代码写入 { 方法体 }
有参数 &#xff0c;无返回值&#xff0c;匿名函数&#xff1a;
using UnityEngine;public class ChinarLambda : MonoBehaviour
{delegate void ChinarDelegate(string str); ChinarDelegate cd; void Start(){cd &#61; s &#61;>{string str &#61; s &#43; "|" &#43; s;print(str);}; cd("Chinar"); }
}
运行结果&#xff1a;打印
Chinar|Chinar
5
Example 1 —— 示例1
调用 LinQ 的 First 函数
First 函数会找到满足条件&#xff0c;最近的一个
a&#xff1a;是 strList 数组中的元素&#xff0c;如果元素的长度大于 5 返回满足条件的 a 元素
有参数 &#xff0c;无返回值&#xff0c;匿名函数&#xff1a;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;public class ChinarLambda : MonoBehaviour
{void Start(){List<string> strList &#61; new List<string>(){"ABC","123456","哈哈","1234567890"};string result &#61; strList.First(a &#61;> a.Length > 5); print(strList.First(a &#61;> a.Length > 5)); }
}
运行结果&#xff1a;打印
123456
6
Example 2 —— 示例2
直接将用表达式代替委托类型&#xff0c;可大量精简代码量
using System;
using UnityEngine;public class ChinarLambda : MonoBehaviour
{void Start(){LambdaFun("Chinar", s &#61;> s.Replace("Chinar", "毋桐"));LambdaFun("大侦探福尔马林", s &#61;>{if (s.Contains("马林")){s &#61; s.Replace("马林", "摩斯");}return s;});}public void LambdaFun(string str, Func<string, string> func){print(func(str)); }
}
运行结果&#xff1a;打印
123456
7
Toggle AddListener Lambda —— 动态添加监听方法 Lambda
再举个例子
在动态监听方法时&#xff0c;可直接简化/省略另建方法
并且 Lambda 表达式&#xff0c;可以访问到外部变量的
未完。。。
using UnityEngine;
using UnityEngine.UI;
public class ChinarDemo : MonoBehaviour
{void Start(){GameObject.Find("Toggle").GetComponent().onValueChanged.AddListener(isOn &#61;> print(isOn ? "开" : "关"));}public void OnClick(bool isOn){if (isOn){print("开");}else{print("关");}}
}
支持
May Be —— 搞开发&#xff0c;总有一天要做的事&#xff01;
拥有自己的服务器&#xff0c;无需再找攻略&#xff01;
Chinar 提供一站式教程&#xff0c;闭眼式创建&#xff01;
为新手节省宝贵时间&#xff0c;避免采坑&#xff01; |
先点击领取 —— 阿里全产品优惠券 (享受最低优惠)
1 —— 云服务器超全购买流程 (新手必备!)
2 —— 阿里ECS云服务器自定义配置 - 购买教程(新手必备!)
3—— Windows 服务器配置、运行、建站一条龙 !
4 —— Linux 服务器配置、运行、建站一条龙 !
技术交流群&#xff1a;806091680 &#xff01; Chinar 欢迎你的加入
END
本博客为非营利性个人原创&#xff0c;除部分有明确署名的作品外&#xff0c;所刊登的所有作品的著作权均为本人所拥有&#xff0c;本人保留所有法定权利。违者必究
对于需要复制、转载、链接和传播博客文章或内容的&#xff0c;请及时和本博主进行联系&#xff0c;留言&#xff0c;Email: ichinar&#64;icloud.com
对于经本博主明确授权和许可使用文章及内容的&#xff0c;使用时请注明文章或内容出处并注明网址