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

在 C# 中,空引用异常(NullReferenceException)是如何产生的?请解释其触发机制,并列举至少三种有效的防范措施。

安全意识技术原理C#

考察说明

考查对 C# 空引用异常本质的理解及防御性编程能力。

回答思路

  1. 【回答框架 1】空引用异常(NullReferenceException)在 C# 中指对值为 null 的引用类型成员进行访问时抛出的异常,例如调用其方法、访问其属性或字段。运行时在解引用时发现引用为空,无法完成操作,于是抛出该异常。
  2. 【回答框架 2】常见触发场景包括:未初始化就使用对象、方法返回 null 但未检查、集合元素可能为 null、第三方库返回 null、以及异步或并发场景下对象被置空。
  3. 【回答框架 3】防范措施主要有:使用 null 条件运算符(?.)进行安全访问;在方法入口使用参数校验(如 ArgumentNullException.ThrowIfNull)明确拒绝 null;结合空合并运算符(??)提供默认值。
  4. 【回答框架 4】对可空值类型(如 int?)使用 .Value 前应检查 HasValue;对引用类型可考虑用可为空注解(nullable reference types)在编译期提醒潜在空引用。
  5. 【回答框架 5】不可变对象或依赖注入容器中确保实例正确创建,减少 null 出现;但关键是用例驱动,测试中覆盖 null 分支。
  6. 【关键点 1】NullReferenceException 本质是解引用 null 引用。
  7. 【关键点 2】使用 ?. 和 ?? 可以简化空值处理。
  8. 【关键点 3】参数校验(如 ArgumentNullException.ThrowIfNull)可提前暴露问题。
  9. 【关键点 4】启用 nullable reference types 可以在编译期捕获部分空引用风险。
  10. 【关键点 5】正确初始化对象和依赖注入可降低空引用出现概率。
  11. 【易错点 1】过度使用 ?. 可能掩盖逻辑错误,应结合明确检查。
  12. 【易错点 2】将可空值类型与引用类型混淆,误用 .Value 导致异常。
  13. 【易错点 3】仅依赖 try-catch 捕获而不主动防御,会降低代码健壮性。