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

请解释 C# 中 nameof 运算符的功能,并说明在实际编码中应如何正确使用它?

技术原理C#

考察说明

考查对 C# 编译期运算符 nameof 的理解及其典型应用场景。

回答思路

  1. 【回答框架 1】nameof 是 C# 6.0 引入的编译期运算符,用于获取变量、类型、成员或方法的字符串名称。它返回的是源代码中标识符的字符串形式,不包含命名空间或类型前缀。
  2. 【回答框架 2】主要用途包括:用于抛出 ArgumentNullException 等异常时传递参数名,避免硬编码字符串;用于属性变更通知中传递属性名,减少魔法字符串;用于日志记录或反射场景,保证名称与代码同步。
  3. 【回答框架 3】编译期求值意味着它不会访问变量的值,即使变量未初始化也不会报错,且不影响性能。它会被编译为常量字符串,因此可以用于特性参数或 switch 语句等需要常量的地方。
  4. 【回答框架 4】使用注意事项:nameof 不能获取动态类型或表达式的结果,只能用于简单标识符;对于泛型方法,它返回泛型参数名而非具体类型名;对于方法参数,返回参数名而非类型名。
  5. 【关键点 1】nameof 返回标识符的字符串名称,编译期常量。
  6. 【关键点 2】常用于异常处理、INotifyPropertyChanged、反射和日志。
  7. 【关键点 3】避免魔法字符串,提高代码可维护性。
  8. 【关键点 4】不能用于动态类型或复杂表达式。
  9. 【易错点 1】误以为 nameof 会返回全限定名,实际上只返回简单名称。
  10. 【易错点 2】在泛型场景中错误期待返回具体类型名。
  11. 【易错点 3】在需要动态计算名称的地方错误使用 nameof,它只支持编译期已知的标识符。