在日常开发中,字符串拼接 是一个高频操作:日志记录、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 ··············