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

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

本文详细解析 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 相关产品和应用

全部下载

专题列表