在 C# 编程中,空合并操作符 ?? 与三元条件操作符 ?: 各自的作用是什么?它们在功能上有什么区别?请分别举例说明它们的使用场景。
考察说明
考查对 C# 中两个常用操作符的理解,明确它们的语法功能与适用场景差异。
回答思路
- 【回答框架 1】空合并操作符 ?? 用于处理可空值或引用类型的空值,语法为 a ?? b,当 a 不为 null 时返回 a,否则返回 b。它简化了空值判断,常用于提供默认值或安全取值。
- 【回答框架 2】三元条件操作符 ?: 是条件表达式,语法为 condition ? consequence : alternative,根据条件为 true 或 false 选择两个表达式之一,两分支类型必须一致或可以隐式转换。
- 【回答框架 3】关键区别在于 ?? 仅判断 null,且返回的是操作数本身;而 ?: 判断任意布尔条件,返回的是两个表达式之一,可用于更复杂的逻辑选择,如比较数值或状态判断。
- 【回答框架 4】使用场景:?? 常与可空类型一起使用,如 int? x = null; int y = x ?? 0; 或字符串默认值。?: 用于基于条件选择值,如 int max = a > b ? a : b;。
- 【回答框架 5】注意 ?? 可链式使用,如 a ?? b ?? c,而 ?: 不常见链式但可通过嵌套实现。此外,C# 6 起还引入了空条件操作符 ?.,它们与 ?? 配合使用,但 ?. 不是条件操作符,而是成员访问。
- 【关键点 1】?? 检查 null,返回非 null 操作数;?: 检查布尔条件,返回两个表达式之一。
- 【关键点 2】?? 用于可空类型或引用类型的空值处理,提供默认值;?: 用于任意条件选择。
- 【关键点 3】?? 可链式,?: 可嵌套,但都应保持可读性。
- 【关键点 4】注意区分 ?. 与 ?:,?. 是空条件访问,不是条件操作符。
- 【易错点 1】使用 ?: 时两个分支类型不一致可能导致编译错误,需确保隐式转换。
- 【易错点 2】?? 的右操作数需要是引用类型或可空类型,值类型需先转为可空。
- 【易错点 3】避免嵌套 ?: 降低可读性,复杂逻辑应使用 if 语句。