C# 中问号运算符 ?、??、?: 详解

不晚
不晚
发布时间:2026-10-13| 3人浏览过
原创

本文详细解析 C# 中常见的三种问号运算符:单问号(?)用于定义可空类型,双问号(??)作为空合并运算符处理 null 值,以及问号冒号组合(?:)构成的三元条件表达式。文章通过代码示例介绍了它们的语法规范、编译原理及典型应用,涵盖值类型可空化处理、默认值替代逻辑及基本分支判断。

1. 可空类型修饰符 (?)

在 C# 中,引用类型(如 string)可以赋值为 null 以表示不存在的值,但值类型(如 int、DateTime)默认不能为 null。若直接对值类型赋值 null,编译器会报错。

为了使值类型也能表示“无值”状态,C# 引入了可空类型(Nullable Types)。使用方式是在类型名后添加单问号 ?,例如 int? 表示可空的整型。

  • 本质原理: T? 实际上是泛型结构 System.Nullable<T> 的语法糖。编译器在编译时会将 int? 转换为 System.Nullable<int>。
  • 适用场景: 当数据库字段可能为空、或变量存在未初始化状态时,使用可空类型能更准确地表达业务逻辑。

第1步:声明并使用可空值类型

以下代码展示了不可空类型与可空类型的区别:

// a 为普通 int,初始化为0(默认),绝不为 null
int a;

// b 为可空 int,可被赋值为 null
int? b = null;

// c 为可空 int,若尝试将 null 与数字运算,结果仍为 null
int? c = b + 1; 

2. 空合并运算符 (??)

空合并运算符(??)主要用于为可空类型或引用类型提供默认值。它是一种简洁的条件判断写法,避免了显式的 null 检查。

  • 运算规则: 如果左操作数不为 null,则返回左操作数的值;否则返回右操作数的值。
  • 结合性: 该运算符是右结合的。表达式 a ?? b ?? c 会被解析为 a ?? (b ?? c),即从右向左进行组合计算。

第2步:使用 ?? 获取默认值

在实际开发中,常用于为配置项或数据库查询结果提供回退值:

// 假设 a 是一个可空整数
int? a = null; 
int b;

// a 为 null,故取右侧默认值 2,b 结果为 2
b = a ?? 2;

// 若修改 a 的值
a = 6;
b = a ?? 8; // a 不为 null,故直接返回 a 本身,b 结果为 6

3. 三元(条件)表达式 (? :)

三元条件表达式是 C# 中最常用的运算符之一,用于根据布尔条件的真假来选择两个值中的一个。虽然这是基础语法,但在简化代码结构方面非常有效。

  • 语法结构: 条件表达式 ? 真值结果 : 假值结果
  • 执行流程: 首先计算条件表达式,如果结果为 true,则执行并返回真值结果;如果结果为 false,则执行并返回假值结果。

第3步:构建简单分支判断

以下是利用三元表达式进行数值判断的标准写法:

// 判断 1 是否大于 0
// 条件成立,返回第一个值 1,最终 a 等于 1
int a = 1 > 0 ? 1 : 0;

以上就是 C# 中问号相关运算符的详细内容,更多关于 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 算法库。