C# null 合并运算符 ?? 用法与简化代码示例

唐可
唐可
发布时间:2026-10-15| 7人浏览过
原创

null 合并运算符(??)是 C# 中用于处理空值引用的高效工具。当左操作数不为 null 时,它直接返回该值;若左操作数为 null,则计算并返回右操作数的值。正确使用该运算符可以替代冗长的三元条件判断,显著简化代码。

原理与基本用法

?? 是一个二元运算符。其核心逻辑非常直观:如果左侧的值存在(非 null),则使用该值;否则,使用右侧提供的默认值或表达式结果。这使得它在为变量提供默认回退值时非常有用。

常见应用场景

第1步:简化查询参数的字符串转换

目的:从 HTTP 请求中获取参数并转为整数,避免繁琐的空值检查与解析分离。

传统写法:通常需要先判断字符串是否为 null,再决定是否调用 int.Parse,最后用三元运算符给出默认值 0。

int length = Request.QueryString["l"] != null ? int.Parse(Request.QueryString["l"]) : 0;

优化后:利用 ?? 运算符将空值检查与默认值设置整合。注意:此处要求查询参数默认为字符串类型,若为空串则需额外处理,但针对潜在的 null 引用非常有效。

// 假设 Request.QueryString["l"] 为 string 类型
// 注意:这里演示的是字符串到字符串的 ?? 逻辑,若需转 int 需结合 Parse
string input = Request.QueryString["l"]; 
int length = int.Parse(input ?? "0");

第2步:处理可空值类型(Nullable Types)

目的:快速将可空类型(如 int?)转换为不可空的基础类型(int)。

传统写法:使用三元运算符判断可空变量是否为 null,是则取默认值,否则解包。

int? m = null;
int n = m == null ? (int)m : 0; // 这种写法在有值时反而会导致逻辑混乱,通常应写作: int n = m.HasValue ? m.Value : 0;

优化后:直接使用 ?? 运算符获取值或默认值,语法更简洁且不易出错。

int? m = null;
int n = m ?? 0;

在上述例子中,因为 m 为 null,所以 n 被赋值为 0。如果 m 有值(例如 5),则 n 将为 5。

注意事项

  • 类型兼容性:左右操作数的类型必须兼容。例如,不能直接将 int? 与 string 进行 ?? 运算,除非它们都隐式转换为同一类型(如 object)。
  • 链式使用:该运算符支持链式调用,如 a ?? b ?? c,表示如果 a 为 null 取 b,若 b 也为 null 则取 c。
  • 性能:对于简单的空值检查,?? 运算符的性能与传统三元运算符相当,但在代码维护性和可读性上优势明显。

总结

null 合并运算符 ?? 是 C# 开发者处理空引用的得力助手。它通过将空值检查与默认值赋值合并为一行代码,使业务逻辑更加清晰紧凑。在日常开发中,特别是在处理 Web 请求参数和数据库可空字段映射时,推荐优先使用此运算符。

以上就是C# null 合并运算符 ?? 用法与代码简化的详细内容,更多关于C#基础语法优化的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。