news 2026/3/26 8:26:22

C# Lambda表达式+可空类型数据

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
C# Lambda表达式+可空类型数据

一、lambda表达式

lambda表达式:包括Func表达式、Action表达式、Predicate<>表达式,可以让我们定义一个变量接收一个函数,主要是作为另外一个函数的参数进行使用,具体体现变量和函数体之间使用=>

其他编程语言称之为箭头函数,但是严谨来说c#没有箭头函数。

定义lambda表达式
方法的组成: 参数列表、返回值 、方法名 方法体

Func表达式

1使用Func关键字接收有返回值的lambda表达式
Func<> 方法类型、函数类型
第一个类型 是参数1的类型
第二个类型 是参数2的类型
第三个类型 是返回值的类型
f1 变量名
(a, b) 参数类别 不用写类型,多个参数时候加()
=> 表达式
{}方法体
有返回值的添加return 关键字。

Func<int,int ,int> f1 = (a, b) => { return a + b; }; Console.WriteLine(f1(10,20));// 可以通过变量名调用函数

Action表达式

2使用Action关键字接收无返回值的lambda表达式
定义一个字符串参数 无返回值的lambda表达式
如果一个参数可以把()不写
如果函数体只有一句可以把{}省掉

Action<string> f2 = (a) => Console.WriteLine(a); f2("hell world");

Predicate表达式

接收返回值为bool类型的lambda表达式

Predicate<int> f3 = a=> a %2==0; Console.WriteLine(f3(3));//false Func<int,bool> f4 = a=> a%3==0; Console.WriteLine(f4(9));//true

总结

/*Func<参数类型,参数类型,返回值类型> f1 = (a,b)=>{return a+b}
* 可以接受有返回值的lambda表达式 参数个数没有限制、返回值的类型也是没有限制
*
* Action<string> f2 = a =>Console.WriteLine(a);
* 只能接收无返回值的lambda表达式
*
* Predicate<int> f3 = a=> a %2==0;
* 只能接收返回值为bool类型的lambda表达式
*/

lambda具体的使用场景:最为另外一个函数参数进行使用,数组的查询方法当中使用

int[] ints = { 1, 2, 3, 4,6,9 }; Console.WriteLine(Array.Find(ints, a => a % 2 == 0));//2 int[] ss = Array.FindAll(ints,v=>v%3==0);//找到所有的数组 // 第一种遍历数组 for (int i = 0; i < ss.Length; i++) { Console.WriteLine(ss[i]+"-------"); } //第二种遍历数组 foreach (var item in ss) { Console.WriteLine(item+"+++++++"); } // 第三种遍历数组 Array.ForEach(ss, v => Console.WriteLine(v + "?????")); //where 找到所有满足条件的元素 foreach (var item in ints.Where(v => { return v % 3 == 0; })) { Console.WriteLine(item); }

二、可空类型数据

空类型是null,引用类型的变量都可以赋值成null

基本数据类型不能赋值为null的 //int a = null; 报错

如果想让基本数据类型能够赋值为null 可以使用?

int? a = null; // a以后可以等于null 在原先的范围内加一个null赋值范围 a = 100;// a可以再赋值100 // int sum = a + 100; 报错 a是可空类型,但是sum不是可空类型

即想使用可空类型 又想使用基本类型进行运算,可以把可空类型再加一个问号 使用双??

int ? b = null; // b可空类型 b = 300; int aa = b ?? 100; // b?? 如果b是null aa的值100, 如果b不是null aa的值300 Console.WriteLine(aa); //300

举例:

int? c = null; int d = c ?? 100; Console.WriteLine(d);//100 c = 999; int sum = (c ?? 100) + 200; Console.WriteLine(sum);// 1199
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/24 15:13:15

零基础玩转TVBox:最新接口配置指南

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 创建一个面向新手的TVBox配置向导应用&#xff0c;功能&#xff1a;1.图文并茂的基础概念解释 2.分步骤配置指导 3.一键测试接口功能 4.常见问题互动解答。要求输出HTML格式的交互式…

作者头像 李华
网站建设 2026/3/25 0:46:39

零基础入门:AccessDatabaseEngine_x64安装使用指南

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 创建一个交互式学习应用&#xff0c;引导新手完成AccessDatabaseEngine_x64的安装和使用。包括&#xff1a;1) 系统要求检测 2) 分步安装向导 3) 简单测试程序&#xff08;连接Acce…

作者头像 李华
网站建设 2026/3/25 7:11:34

15分钟打造产品更新日志时间线原型

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 创建一个产品更新日志时间线原型&#xff0c;功能&#xff1a;1. 按版本展示新特性 2. 支持用户反馈收集 3. 社交分享按钮 4. 简单的用户互动 5. 使用最轻量级实现 6. 支持后续扩展…

作者头像 李华
网站建设 2026/3/21 19:10:39

不用标准库:5分钟实现你自己的strlen函数

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 开发一个strlen快速实现工具包&#xff0c;提供以下备选方案&#xff1a;1) 纯指针运算 2) 递归实现 3) 查表法 4) 硬件特性利用。每个实现不超过10行代码&#xff0c;附带极简测试…

作者头像 李华
网站建设 2026/3/15 14:23:06

2025 OCR技术突破:DeepSeek-OCR如何用3B参数重构文档智能处理效率

2025 OCR技术突破&#xff1a;DeepSeek-OCR如何用3B参数重构文档智能处理效率 【免费下载链接】DeepSeek-OCR DeepSeek-OCR是一款以大语言模型为核心的开源工具&#xff0c;从LLM视角出发&#xff0c;探索视觉文本压缩的极限。 项目地址: https://ai.gitcode.com/hf_mirrors/…

作者头像 李华
网站建设 2026/3/16 2:41:23

TVBox接口维护效率提升10倍的AI方案

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 开发一个TVBox接口智能维护系统&#xff0c;功能包括&#xff1a;1.自动全网爬取潜在接口 2.多线程速度测试 3.智能排序推荐 4.异常自动切换。要求输出可视化报告&#xff0c;显示各…

作者头像 李华