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

C# 中的空条件运算符(?.)与空合并运算符(??)详解

在日常 C# 编程中,我们经常需要判断对象是否为空(null),
否则直接访问成员可能会抛出 NullReferenceException
为了解决这种繁琐的空判断,C# 提供了两个非常实用的语法糖:

  • ?. —— 空条件运算符(null-conditional operator)
  • ?? —— 空合并运算符(null-coalescing operator)

✳️ 一、空条件运算符(?.

✅ 语法:

A?.B

💬 含义:

如果 A 不为 null,返回 A.B
如果 Anull,整个表达式直接返回 null

🧩 等价写法:

var result = (A != null) ? A.B : null;

💡 示例:

Person p = null;// 不会抛异常,直接返回 null
var name = p?.Name;    // 等价于:
string name = (p != null) ? p.Name : null;

这样写的好处是:安全访问,不会触发空引用异常。


✳️ 二、空合并运算符(??

✅ 语法:

A ?? B

💬 含义:

  • 如果左侧 A 不为 null,返回 A
  • 如果左侧 Anull,返回右侧 B

🧩 等价写法:

var result = (A != null) ? A : B;

💡 示例:

string name = userName ?? "匿名用户";

如果 userNamenull,则结果为 "匿名用户"


⚙️ 三、组合使用:?.??

这两个运算符常常配合使用,用于安全访问链式对象,并提供默认值。

🌰 示例:

var name = player?.Info?.Name ?? "未知玩家";

解释:

  1. player?.Info?.Name

    • 如果 playerInfonull,整个表达式结果为 null
  2. ?? "未知玩家"

    • 如果左侧是 null,则使用 "未知玩家"

最终效果:
👉 安全地获取玩家名称,如果取不到,就返回一个默认字符串。


⚡ 四、总结对比

运算符名称用法含义等价逻辑
?.空条件运算符A?.B如果 A 不为空则访问 A.B,否则返回 null(A != null) ? A.B : null
??空合并运算符A ?? B如果 A 为空则返回 B,否则返回 A(A != null) ? A : B

🎯 五、实际使用建议

  • 使用 ?.:当你不确定对象是否为 null,但仍要访问其成员。
  • 使用 ??:当你想在值为空时提供一个默认值。
  • 组合使用player?.Info?.Name ?? "未知" 是最常见的写法。

✅ 小结

表达式说明结果
A?.B如果 A 不为空返回 A.B,否则 nullA == null ? null : A.B
A ?? B如果 A 不为空返回 A,否则 BA == null ? B : A
A?.B ?? C如果 A 为空或 A.B 为空,返回 C安全且简洁的写法

✍️ 示例总结:

var playerName = player?.Info?.Name ?? "暂无玩家";

👉 安全访问对象属性链,并提供默认值。
避免 NullReferenceException,代码更优雅。

http://www.dtcms.com/a/549464.html

相关文章:

  • 福建人力资源建设网站房地产销售技巧
  • 佳木斯 网站建设网页版qq登录入口版qq账号登录界面
  • 基于django网站开发课设报告广州开公司的基本流程及费用
  • VecDeque 的环形缓冲区:从 `head/tail` 到 `wrapping_add`,一次把缓存、SIMD 与 `no_std` 全部打通
  • EasyGBS在智慧仓储物流场景下视频实时监控系统应用方案
  • 网站建设分哪几种医院网站做竞价需要注意广告法
  • 数据分析平台:驱动智能决策的利器
  • 初识Java-7
  • 潍坊比较大的网站制作公司网站建设和网页制作
  • Postman vs Swagger vs PostIn,接口管理工具一文纵评
  • 如何使用React和Redux构建现代化Web应用程序
  • 湖北省住房和城乡建设厅网站首页wordpress自动刷新2次
  • 网站建设的设计方案和实施计划网站做优化效果怎么样
  • AWS + WordPress:中小型外贸独立站的理想组合
  • 掌控未来无线通信新时代——全面解读无线发射和接收模块的创新应用
  • 湖北洈水水利水电建设公司网站小米手机商城
  • 部署开源漏洞扫描工具SiriusScan及问题解决
  • 互联网企业外化能力与实体零售融合:基于定制开发开源AI智能名片S2B2C商城小程序的实践探索
  • 淮安建设机械网站制作网站指向错误
  • 青岛seo网站管理手机端店铺装修
  • Linux InfiniBand FMR池深度解析:高性能内存注册的设计与实现
  • Linux 运行时电源管理(PM Runtime)API 使用说民
  • 激光驱鸟装置:技术原理、应用场景与综合优势全解析
  • 【Rust编程:从小白入坑】Rust结构体(Struct)详解
  • 【开题答辩实录分享】以《足球社区微信小程序》为例进行答辩实录分享
  • 哪个网站能帮助做试卷个人免费注册公司
  • 万国手表网站亚马逊企业网站建设
  • java对图片进行表单,生成本地图片或者流式输出
  • Python 虚拟环境:告别依赖冲突的实用指南
  • LP8773S第二代准谐振PWM控制器12V芯片内部框架图及应用信息介绍