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

请阐述在 C# 中字符串插值特性的底层实现机制及其工作原理。

考察说明

考察对 C# 字符串插值底层实现原理(编译器转换与格式化逻辑)的理解。

回答思路

  1. 【回答框架 1】字符串插值是 C# 6.0 引入的语法糖,编译器在编译时会将插值字符串转换为 string.Format 或 FormattableString 等方法的调用。
  2. 【回答框架 2】若插值表达式不包含对齐格式或格式字符串,优化后可能直接使用 DefaultInterpolatedStringHandler 或字符串拼接;若包含格式,则生成对 string.Format 的调用。
  3. 【回答框架 3】当目标为 FormattableString 类型时,编译器会保留参数原始格式,供特定区域性或自定义格式化使用;当目标为 string 时,会使用当前区域性和文化信息进行转换。
  4. 【回答框架 4】从 C# 10 起,默认会创建 DefaultInterpolatedStringHandler 结构体实例,它通过追加和格式化各插值部分来构建结果,减少装箱与中间字符串分配,提升性能。
  5. 【关键点 1】编译器将插值字符串转换为 string.Format 或 FormattableString,或使用 DefaultInterpolatedStringHandler。
  6. 【关键点 2】DefaultInterpolatedStringHandler 避免不必要的中间字符串分配和装箱,提高效率。
  7. 【关键点 3】插值结果受当前区域性影响,而 FormattableString 允许自定义区域性或不变区域性转换。
  8. 【易错点 1】插值字符串并非在运行时解析,而是编译期的语法糖,因此性能主要取决于生成的具体代码。
  9. 【易错点 2】若使用 FormattableString 时忽略文化差异,可能导致输出不符合预期,尤其是在多语言环境中。