C#语法糖(按照实用性排序) 📅 发布时间:2026/7/7 12:23:31 👁️ 浏览次数: 这里整理了C#日常开发最高频、最能提升代码简洁度的语法糖按实用度排序语法糖本质是编译器帮你生成等价的完整代码不影响运行性能只负责让代码更短、更易读、更少出错。一、空安全系列每天都用优先级最高彻底解决层层判空的冗余代码是C#最实用的语法特性没有之一。1. 空条件运算符?./?[]访问对象的属性/方法/索引前自动判空对象为null时直接返回null不会抛空引用异常。// 原始写法stringiconnull;if(itemInfo!nullitemInfo.Data!null)iconitemInfo.Data.Icon;// 语法糖写法stringiconitemInfo?.Data?.Icon;// 数组/索引同理int?firstIditemList?[0]?.Id;2. 空合并运算符??左边值为null时取右边的默认值专门处理“拿不到就用默认值”的场景。// 原始写法stringnameitem.Name;if(namenull)name未知道具;// 语法糖写法stringnameitem.Name??未知道具;// 配合?. 一起用intcountitemInfo?.Num??0;3. 空合并赋值??左边变量为null时才把右边的值赋给它简化延迟初始化。// 原始写法if(infosnull)infosnewListItemInfo();// 语法糖写法infos??newListItemInfo();4. 空包容运算符!告诉编译器“这个对象我确定不会为null不用报警告”Unity开发中非常常用很多Unity对象生命周期由引擎控制编译器无法判断。// 明确知道GetComponent一定能拿到消除空警告varcontrollergameObject.GetComponentItemController()!;二、类型与声明简化1. 隐式类型var编译器自动推导变量类型代码更简洁尤其适合长类型名。// 原始写法Dictionaryint,ItemInfoitemDictnewDictionaryint,ItemInfo();// 语法糖写法varitemDictnewDictionaryint,ItemInfo();注意var仍然是强类型编译后和写全类型完全等价不是动态类型。2. 目标类型推导new()C# 9声明变量时右边new可以省略类型编译器自动匹配左边的类型进一步简化。// 原始写法ListItemDatalistnewListItemData();// 语法糖写法ListItemDatalistnew();3. 值元组ValueTuple多返回值神器方法可以直接返回多个值不用写out参数、不用自定义结构体/类游戏逻辑中极其常用。// 定义方法直接返回多个结果public(boolisSuccess,intcount,intitemId)CheckItem(inttype){return(true,99,1001);}// 调用解构接收var(ok,num,id)CheckItem(1);4. 解构赋值可以把对象、元组拆成多个变量一次性赋值。// 元组解构var(id,name,num)(1001,生命药水,10);// 自定义类也可以支持解构写Deconstruct方法publicvoidDeconstruct(outintid,outstringname,outintnum){idId;nameName;numNum;}三、字符串处理1. 字符串插值$替代string.Format直接在字符串里嵌变量和表达式可读性极强。// 原始写法stringmsgstring.Format(获得道具{0} x{1},itemName,count);// 语法糖写法stringmsg$获得道具{itemName}x{count};// 还可以直接写表达式stringtip$剩余数量{info.Num-cost};2. 原始字符串字面量...C# 11写多行文本、JSON、SQL时不用转义引号和换行非常干净。stringjson{id:1001,name:生命药水,num:10};四、成员与方法简化1. 表达式体成员单行的方法、属性、构造函数都可以用简写去掉大括号和return。// 原始写法publicintTotalNum{get{returnprotos.Sum(oo.Num);}}publicstringGetDesc(){returnData.Description;}// 语法糖写法publicintTotalNumprotos.Sum(oo.Num);publicstringGetDesc()Data.Description;2. 扩展方法给已有的类型“新增”方法不用修改原类不用继承是LINQ的基础自己写工具方法也极其好用。// 给int写一个扩展方法publicstaticclassIntExt{publicstaticboolIsPositive(thisintnum)num0;}// 调用像原生方法一样用if(count.IsPositive()){...}3. 可选参数 命名参数方法参数给默认值调用时可以跳过部分参数还可以按名字传参不用记参数顺序。// 定义publicvoidAddItem(intitemId,intnum1,boolshowTiptrue){...}// 调用只传itemId其他用默认AddItem(1001);// 命名传参只改showTip不用管顺序AddItem(1001,showTip:false);4. 局部函数在方法内部定义小函数只在当前方法内可见比委托更干净性能更好。publicvoidProcessItems(ListItemitems){// 内部辅助函数boolIsValid(Itemitem)item.Num0item.ExpTime0;foreach(variteminitems){if(IsValid(item)){...}}}五、LINQ 集合操作集合处理神器LINQ是C#处理集合的大杀器几乎所有集合遍历、筛选、转换都可以用它一行写完替代大量foreach循环。以下是最高频的10个方法ListItemInfoinfos...;// 1. 筛选WherevarvalidItemsinfos.Where(xx.Num0).ToList();// 2. 转换/映射SelectvarallItemIdsinfos.Select(xx.Data.Id).ToList();// 3. 取第一个/第一个默认First / FirstOrDefaultvarfirstIteminfos.First(xx.Data.Id1001);variteminfos.FirstOrDefault(xx.Data.Id1001);// 4. 是否存在AnyboolhasIteminfos.Any(xx.Data.Id1001);// 5. 全部满足AllboolallEnoughinfos.All(xx.Num5);// 6. 计数/求和Count / SuminttotalCountinfos.Sum(xx.Num);intrareCountinfos.Count(xx.Data.Grade3);// 7. 排序OrderBy / OrderByDescendingvarsortedinfos.OrderByDescending(xx.Data.Grade).ToList();// 8. 转列表/数组ToList() / ToArray()// 把IEnumerable转为实际集合最常用// 9. 分组GroupByvargroupsinfos.GroupBy(xx.Data.Type);// 10. 字典转换ToDictionaryvardictinfos.ToDictionary(xx.Data.Id,xx);六、模式匹配替代冗余if-else1.is类型模式 变量声明判断类型的同时直接声明变量不用二次强转。// 原始写法if(protoisLists){Listslist(Lists)proto;...}// 语法糖写法if(protoisListslist){// 直接用list变量itemslist.Items.ToList();}2.switch表达式C# 8把switch语句写成表达式更简洁适合多分支返回值的场景。// 原始写法stringGetQualityName(intgrade){switch(grade){case1:return普通;case2:return稀有;case3:return史诗;default:return未知;}}// 语法糖写法stringGetQualityName(intgrade)gradeswitch{1普通,2稀有,3史诗,_未知};3. 属性模式直接匹配对象的属性值写复杂分支判断非常干净。stringGetItemDesc(ItemInfoinfo)infoswitch{{Num:0}未拥有,{Data.Grade:3,Num:10}大量稀有道具,{Data.Type:2}材料类道具,_普通道具};七、其他高频实用1.nameof运算符获取变量、类、方法、属性的名字字符串避免硬编码改名字时编译器自动同步。// 原始写法Debug.LogError(ItemController 初始化失败);// 语法糖写法改类名时自动跟着变Debug.LogError(${nameof(ItemController)}初始化失败);2. 三元运算符?:最基础也最常用的单行条件赋值。// 原始写法stringtext;if(num0)text充足;elsetext不足;// 语法糖写法stringtextnum0?充足:不足;3. 索引与范围^/..C# 8快速取数组/集合的末尾元素和片段。int[]arr{1,2,3,4,5};intlastarr[^1];// 最后一个元素 5intsecondLastarr[^2];// 倒数第二个 4int[]partarr[1..3];// 索引1到2的元素 {2,3}4.using声明C# 8自动释放IDisposable对象不用写大括号作用域到当前方法结束自动释放。// 原始写法using(varstreamnewFileStream(path,FileMode.Open)){...}// 语法糖写法usingvarstreamnewFileStream(path,FileMode.Open);// 方法结束自动释放5.record记录类型C# 9专门用来做不可变数据载体自带值比较、ToString、拷贝非常适合传配置、传数据快照。// 定义一行搞定自动生成构造函数、属性、Equals、ToStringpublicrecordItemSnapshot(intId,stringName,intNum);// 使用varsnapnewItemSnapshot(1001,药水,10);varnewSnapsnapwith{Num20};// 拷贝并修改部分字段学习优先级建议第一梯队必掌握空安全系列、字符串插值、var、LINQ基础、表达式体成员第二梯队大幅提效值元组、扩展方法、is模式匹配、switch表达式、nameof第三梯队按需使用record、索引范围、原始字符串、属性模式这些特性在Unity 2021及以上版本都已完整支持放心用在项目里即可。
L9958电机驱动芯片与PIC18F47J53的SPI控制方案解析 1. L9958电机驱动芯片深度解析L9958是意法半导体(ST)推出的一款专为高可靠性应用设计的SPI控制H桥驱动芯片。这款芯片在工业自动化、汽车电子等高要求场景中表现出色,其核心优势在于集成了完善的保护机制和灵活的配置能力。作为一款全桥驱动器,L9958可以… 2026/7/7 12:23:31
AI学习机技术拆解:从OCR、TTS到知识图谱,看教育硬件的真实价值 🚀 30款热门AI模型一站整合,DeepSeek/GLM/Qwen 随心用,限时 5 折。 👉 点击领海量免费额度 最近几年,教育硬件赛道异常热闹,从传统的点读笔、学习平板,到如今集成大模型的“AI学习机”&#… 2026/7/7 12:21:30
广西专业的溶氧电极公司如何选择? 引言在水质监测领域,溶氧电极是至关重要的设备之一。它能够准确测量水中的溶解氧含量,对于环境监测、水产养殖、工业生产等多个领域都具有重要意义。然而,市场上溶氧电极品牌众多,质量参差不齐,如何选择一家专业的溶氧… 2026/7/7 12:21:30
EM3080-W与STM32L031K6的嵌入式条码识别方案解析 1. EM3080-W与STM32L031K6的硬件组合解析 在工业级条码识别领域,EM3080-W模块与STM32L031K6微控制器的组合堪称黄金搭档。EM3080-W是专为嵌入式系统设计的高性能条码扫描模块,其核心是一颗500万像素的CMOS传感器,配合自主研发的DSP解码芯片&a… 2026/7/7 13:54:38
(其他)windows常用命令 1.左右屏快捷键 问题:在边写代码边问AI工具时,频繁在IDE和浏览器切换,导致效率低下。 方案:按住win←或win→,可以进行左右屏显示。 2026/7/7 13:54:38
3层架构深度解析:ncmdumpGUI如何优雅破解网易云音乐NCM格式的技术哲学 3层架构深度解析:ncmdumpGUI如何优雅破解网易云音乐NCM格式的技术哲学 【免费下载链接】ncmdumpGUI C#版本网易云音乐ncm文件格式转换,Windows图形界面版本 项目地址: https://gitcode.com/gh_mirrors/nc/ncmdumpGUI 在数字音乐版权保护与用户使… 2026/7/7 13:52:38
IS31FL3731与PIC18F4585的LED矩阵控制方案 1. IS31FL3731与PIC18F4585的硬件协同设计 在LED矩阵控制领域,IS31FL3731作为一款I2C接口的可编程LED驱动芯片,与PIC18F4585微控制器的组合能够实现高度灵活的视觉表现。这套硬件组合的核心优势在于:IS31FL3731通过内置显示缓存和PWM控制器&a… 2026/7/7 13:50:38
Biotinyl-Magainin 2 ;Bio-GIGKFLHSAKKFGKAFVGEIMNS 一、基础信息中文名称:N 端生物素修饰 Magainin 2(蛙皮肤抗菌肽)英文全称:Biotinyl-Magainin 2三字母序列:Biotin-Gly-Ile-Gly-Lys-Phe-Leu-His-Ser-Ala-Lys-Lys-Phe-Gly-Lys-Ala-Phe-Val-Gly-Glu-Ile-Met-Asn-Ser单字… 2026/7/7 13:48:37
Python开发入门指南:从零开始搭建你的第一个项目 你想学Python,已经不下十次在B站收藏了“零基础入门”的视频,但至今连一个能运行的.py文件都没写过。别再让收藏夹吃灰了,今天我们不谈语法大全,不谈框架选择,直接从零开始搭建你的第一个项目——一个能在终端里运行的… 2026/7/7 13:48:37
Acunetix v24.8 深度解析:DAST漏洞扫描器核心原理与DevSecOps实践 1. 项目概述:Acunetix v24.8 高级版漏洞扫描器深度解析作为一名在网络安全领域摸爬滚打多年的老兵,我深知一款趁手的“兵器”对于安全测试工作意味着什么。今天要聊的,就是Web应用安全测试领域里一个响当当的名字——Acunetix。特别是其v24.8… 2026/7/7 0:01:11
如何3步搞定加密视频下载:跨平台资源嗅探与解密工具终极指南 如何3步搞定加密视频下载:跨平台资源嗅探与解密工具终极指南 【免费下载链接】res-downloader 视频号、小程序、抖音、快手、小红书、直播流、m3u8、酷狗、QQ音乐等常见网络资源下载! 项目地址: https://gitcode.com/GitHub_Trending/re/res-downloader 你是… 2026/7/7 0:03:13
Jailhouse-gui可视化管理工具:让多核处理器分区变得简单高效 Jailhouse-gui可视化管理工具:让多核处理器分区变得简单高效 【免费下载链接】Jailhouse-gui A graphical user interface (GUI) tool for configuring and managing Jailhouse, a Linux-based hypervisor for partitioning multicore processors into isolated cel… 2026/7/7 0:03:13
6个月转型AI工程师:实战路径与核心技能 1. 项目概述:6个月转型AI工程师的可行性路径在2023年大模型技术爆发的背景下,AI工程师岗位需求同比增长217%(LinkedIn数据)。不同于传统算法工程师需要3-5年培养周期,现代AI工程师更侧重工程化落地能力。我在硅谷科技公… 2026/7/7 11:26:57
TPAFE0808与PIC18F87K22的多通道信号采集方案 1. 项目背景与核心需求在工业自动化、医疗设备和科研仪器等领域,多通道信号采集与系统监测是基础且关键的技术需求。传统方案往往面临通道数量不足、信号调理复杂、系统集成度低等问题。TPAFE0808作为一款8通道模拟前端芯片,与PIC18F87K22微控制器的组合… 2026/7/7 11:26:57
STC3115与PIC18LF26K80构建高精度电池管理系统 1. STC3115与PIC18LF26K80在电池管理系统中的核心价值在现代电子设备中,电池管理系统(BMS)的重要性不亚于设备的核心处理器。STC3115作为一款高精度电池电量监测IC,与PIC18LF26K80微控制器的组合,构成了一个既能精确监控又能智能管理的完整解… 2026/7/7 11:26:58