在日常开发中,字符串拼接 是一个高频操作:日志记录、UI 文本渲染、SQL 拼接、报错提示……
C# 提供了多种方式来组合字符串,从最早的 + 拼接,到 string.Format,再到现在的 字符串内插,让代码变得更加简洁优雅。
今天,我们就来深入解析 C# 的字符串内插。
1️⃣ 字符串拼接的传统方式
在 C# 6 之前,我们通常使用以下方式拼接字符串:
使用 +
string name = "Alice";
int age = 25;
string msg = "My name is " + name + ", I am " + age + " years old.";⚠️ 缺点:可读性差,尤其在复杂拼接时显得混乱。
使用 string.Format
string msg = string.Format("My name is {0}, I am {1} years old.", name, age);✅ 优点:比 + 拼接更清晰
⚠️ 缺点:参数顺序不直观,容易写错 {0} {1}。
2️⃣ 字符串内插的语法
C# 6 引入了 字符串内插,让拼接更直观。
string name = "Alice";
int age = 25;
string msg = $"My name is {name}, I am {age} years old.";👉 只需要在字符串前加 $,就能在 {} 中直接写变量或表达式。
✅ 优点:
- • 可读性极佳
- • 不易出错
- • 支持表达式计算
3️⃣ 内插中的表达式
不仅可以放变量,还可以直接放表达式:
int a = 5, b = 3;
string result = $"Sum: {a + b}, Product: {a * b}";
Console.WriteLine(result);
// 输出:Sum: 8, Product: 15甚至支持 方法调用:
string msg = $"Current time: {DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}";4️⃣ 格式化与对齐
字符串内插与 格式化字符串 完美结合。
数字格式化
double price = 1234.567;
string msg = $"Price: {price:F2}";
// 输出: Price: 1234.57日期格式化
DateTime now = DateTime.Now;
string msg = $"Today: {now:yyyy/MM/dd}";对齐输出
string msg = $"|{"Name",-10}|{"Age",5}|";
Console.WriteLine(msg);
// 输出: |Name | Age|👉 -10 表示左对齐,占 10 个字符宽度。
5️⃣ 内插的高级用法
✅ 多行内插字符串
从 C# 11 开始,可以用 原始字符串字面量 结合内插:
string name = "Alice";
string json = $$"""
{
"Name": "{{name}}",
"Age": 25
}
""";
Console.WriteLine(json);👉 这种写法对生成 JSON/XML/SQL 特别友好。
✅ 与 Span 结合的高性能字符串内插
C# 10 引入了 插值字符串处理器,可以避免不必要的字符串分配,提升性能。例如:
public void LogMessage(FormattableString message)
{
Console.WriteLine(message.ToString());
}
LogMessage($"User {name} logged in at {DateTime.Now}");👉 FormattableString 可以延迟格式化,甚至直接转换为 SQL 参数化查询,提升性能和安全性。
最后
- • 内插字符串最终还是编译成
string.Format或StringBuilder,性能上比+更优。 - • 在 循环内拼接大字符串,仍然推荐用
StringBuilder。 - • 在 高性能场景,可以考虑
Span或string.Create来优化。
·············· END ··············










