C#中的?.和??运算符是什么 - 安全处理null引用的优雅技巧

小老鼠
发布: 2025-12-05 11:22:03
原创
856人浏览过
?.和??是C#中用于安全处理null的运算符:?.在对象非null时访问成员,否则返回null;??为null提供默认值;二者常组合使用,如int age = user?.Profile?.Age ?? 0。

c#中的?.和??运算符是什么 - 安全处理null引用的优雅技巧

在C#中,?.(空条件运算符)??(空合并运算符)是专为安全处理可能为 null 的引用类型而设计的语法糖。它们让代码更简洁、可读性更高,同时避免了冗长的 if (obj != null) 检查。

?.:只在对象非null时才访问成员

当你不确定某个对象是否为 null,又想调用它的方法、属性或索引器时,用 ?. 可以避免运行时异常。如果左侧操作数为 null,整个表达式直接返回 null(或对应类型的默认值,如 int? 返回 null),不再执行右侧操作。

  • 例如:string name = person?.Name; —— 如果 personnullname 就是 null,不会抛出 NullReferenceException
  • 支持链式调用:var city = customer?.Address?.City; —— 任一环节为 null,结果即为 null
  • 可用于方法调用:int? length = str?.Length;str?.ToString();(返回 null 而非报错)

??:提供null时的默认值

?? 用于为可能为 null 的表达式指定一个“备选值”。只要左侧不为 null,就返回它;否则返回右侧的操作数(该值可以是字面量、变量或表达式)。

畅图
畅图

AI可视化工具

畅图 179
查看详情 畅图
  • 例如:string displayName = person?.Name ?? "未知用户"; —— 先用 ?. 安全取名,再用 ?? 补默认值
  • 右侧可以是复杂表达式:var config = settings ?? LoadDefaultConfig();(仅当 settingsnull 时才调用方法)
  • 注意:只对引用类型和可空值类型(如 int?)有效;普通 int 不能直接用 ??

组合使用:构建健壮的空值处理链

?.?? 经常一起出现,形成清晰、安全的默认值逻辑。这种组合几乎替代了传统“先判空再赋值”的模板代码。

  • int age = user?.Profile?.Age ?? 0; —— 即使 userProfilenull,也不会崩溃,最终得到 0
  • IEnumerable<string> tags = post?.Tags ?? Enumerable.Empty<string>();</string></string> —— 确保返回一个可用的集合
  • 搭配 ??=(空合并赋值)还能简化初始化:cache ??= new Dictionary<string object>();</string>

基本上就这些。它们不是黑魔法,但确实让日常的空值防御变得轻量又自然——不复杂,但容易忽略。

以上就是C#中的?.和??运算符是什么 - 安全处理null引用的优雅技巧的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号