C#面试题更新 2026-08-05

请说明C#中条件访问运算符(?.)与空合并运算符(??)的用途及使用方法,并解释它们各自的作用场景。

技术原理C#

考察说明

考查对C#中两种常见空值处理运算符的理解及实际应用能力。

回答思路

  1. 【回答框架 1】条件访问运算符(?.)用于在访问成员或索引前检查对象是否为null,若为null则整个表达式返回null,避免了显式null检查。例如,person?.Name 当person为null时表达式结果为null,否则返回Name属性值。它可链式使用,如person?.Address?.City。
  2. 【回答框架 2】空合并运算符(??)用于在左侧操作数为null时返回右侧操作数,否则返回左侧值。它常用于为可能为null的变量提供默认值,如 string name = input ?? "default";,也可用于可空类型,如 int? a = null; int b = a ?? 0;。
  3. 【回答框架 3】两者可组合使用,如 person?.Name ?? "unknown",先安全访问Name,若结果为null(因person为null或Name为null)则返回默认字符串。还可使用??=进行空合并赋值,如 list ??= new List<int>();。
  4. 【关键点 1】?.可在访问前检查null,避免NullReferenceException。
  5. 【关键点 2】??为左侧为null时提供替代值。
  6. 【关键点 3】??=用于在变量为null时给其赋值。
  7. 【关键点 4】?.与??可组合实现简洁的空值处理逻辑。
  8. 【易错点 1】?.仅用于成员访问,不能用于方法调用时判断返回值是否为null。
  9. 【易错点 2】??两侧类型需兼容,左侧可为可空值类型或引用类型。
  10. 【易错点 3】??=需变量可写,且C# 8.0以上支持。