在编写代码时,处理字符串格式化是不可避免的任务。C# 提供了多种实现方式,既有经典方法,也有现代语法。本文将系统梳理这些技术,分析各自适用场景,帮助开发者快速选择最合适的方案,提升代码效率与可读性。
1. string.Format 方法
string.Format 是 C# 诞生之初就存在的传统方法,通过占位符 {0}、{1} 等标记参数位置,实现字符串拼接。
string name = "张三";
int age = 25;
string message = string.Format("我的名字是{0},今年{1}岁。", name, age);
Console.WriteLine(message); // 输出:我的名字是张三,今年25岁。
2. 插值字符串(Interpolated Strings)——推荐方式(C# 6.0+)

C# 6.0 起,微软引入了更优雅的字符串插值语法。使用 $ 符号开头,变量可直接“嵌入”字符串中,阅读体验接近自然语言,代码更直观。
string name = "李四";
int age = 20;
string message = $"我的名字是{name},今年{age}岁。";
Console.WriteLine(message); // 输出:我的名字是李四,今年20岁。
你甚至可以在 {} 中直接编写表达式:
string message = $"五年后,我将{age + 5}岁。"; // 输出:五年后,我将35岁。
3. 复合格式化(Composite Formatting)

复合格式化与 string.Format 本质相同,但更常用于 Console.WriteLine 等直接输出场景:
Console.WriteLine("姓名:{0},年龄:{1}", name, age);
4. 格式说明符(Format Specifiers)
格式说明符能够精确控制数字、日期等类型的显示效果,是日常开发中非常实用的工具。
double price = 1234.567;
string formatted = $"价格:{price:C}"; // 货币格式:¥1,234.57(根据区域设置)
string percent = $"{0.123:P}"; // 百分比:12.30%
string date = $"{DateTime.Now:yyyy-MM-dd}"; // 日期格式:2025-04-05
常用格式符一览:
C:货币
D:十进制整数(常用于补零)
F:固定小数位数
N:带千位分隔符的数字
P:百分比
D、T、yyyy-MM-dd 等:日期时间
示例:
int num = 42;
Console.WriteLine($"{num:D5}"); // 输出:00042(5位宽,前面补零)
5. ToString() 方法配合格式字符串
基本类型均提供 ToString(string format) 方法,可直接调用实现格式化:
double value = 1234.56;
string s = value.ToString("N2"); // 输出:1,234.56
6. StringBuilder 中的格式化
当需要大量字符串拼接时,效率是需要重点考虑的因素。此时 StringBuilder 的 AppendFormat 方法能有效提升性能:
var sb = new StringBuilder();
sb.AppendFormat("欢迎 {0},您有 {1} 条未读消息。", name, 5);
Console.WriteLine(sb.ToString());
总结对比:
| 方法 | 优点 | 推荐场景 | |------|------|----------| | string.Format | 兼容旧版本,适合复杂逻辑 | .NET Framework 项目 | | 插值字符串 $"" | 语法简洁、易读 | 推荐现代C#开发首选 | | 复合格式化 | 直接输出,无需变量 | Console.WriteLine 等 | | ToString(format) | 精确控制数值格式 | 数字、日期格式化 |
一句话总结:在当下的 C# 开发中,优先使用插值字符串($"")是最佳实践。它不仅可读性强,还支持内嵌表达式和格式化说明符,写起来轻松,维护起来省心。
例如:
$"今天的日期是 {DateTime.Now:yyyy年MM月dd日},温度是 {25.6:F1}℃。"
代码更直观,也更接近人类语言,能够显著提升开发效率与代码质量。
