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

在 C# 编程中,is 与 as 这两个关键字分别承担什么角色?请说明它们各自的适用场景,并对比二者在类型转换处理方式上的核心差异。

技术原理C#

考察说明

考察对 C# 类型判断与转换关键字的理解,以及能否准确区分 is 与 as 的行为差异和适用场景。

回答思路

  1. 【回答框架 1】is 运算符用于检查对象是否兼容于指定类型,返回布尔值。它不进行转换,只做类型判断。例如 obj is string 判断 obj 是否为 string 类型或其派生类型。
  2. 【回答框架 2】as 运算符用于尝试将对象转换为指定引用类型,若转换失败则返回 null,不抛出异常。它仅适用于引用类型或可空值类型。例如 obj as string 若 obj 非 string 则返回 null。
  3. 【回答框架 3】区别在于用途:is 用于安全地判断类型,通常搭配模式匹配或条件语句;as 用于获取转换后的对象并直接使用,但需后续判空。as 不适用于值类型(除非可空)。
  4. 【回答框架 4】在 C# 中推荐优先使用模式匹配的 is 语句(如 if (obj is string s)),既能判断又能在块内直接使用转换后的变量,减少两次类型检查的开销。
  5. 【关键点 1】is 返回布尔值,仅判断类型兼容性;as 返回转换结果或 null,不抛异常。
  6. 【关键点 2】as 仅适用于引用类型和可空值类型,值类型需用括号强转。
  7. 【关键点 3】模式匹配的 is(如 is string s)可同时判断并声明变量,是更推荐的写法。
  8. 【易错点 1】误以为 as 可以用于值类型,实际会编译错误,应改用显式转换。
  9. 【易错点 2】忽略 as 返回 null 的情况,直接使用转换结果导致空引用异常。
  10. 【易错点 3】在频繁类型判断场景下,两次 is 或 is 加转换可能影响性能,应优先使用模式匹配。