在C#的开发场景中,字符串的动态拼接和格式化是非常常见的需求,不同的字符串模板类适用于不同的业务场景,开发者可以根据需求选择合适的工具来提升代码质量和执行效率。

C#内置字符串模板方案
字符串插值
字符串插值是C# 6.0引入的语法糖,使用$符号前缀,直接在字符串中嵌入表达式,是最简单的字符串模板实现方式,适合简单的字符串拼接场景。
using System;
class Program
{
static void Main()
{
string name = "张三";
int age = 25;
// 直接在字符串中嵌入变量和表达式
string result = $"用户姓名:{name},年龄:{age},明年年龄:{age + 1}";
Console.WriteLine(result);
}
}
这种方式的优点是语法简洁,可读性强,但是每次使用都会生成新的字符串对象,频繁操作的话会产生较多的内存开销。
StringBuilder类
StringBuilder位于System.Text命名空间下,是可变的字符串类型,适合需要多次拼接字符串的场景,能有效减少内存分配。
using System;
using System.Text;
class Program
{
static void Main()
{
StringBuilder sb = new StringBuilder();
// 多次追加内容,不会生成大量临时字符串
sb.Append("用户列表:");
sb.Append("张三,");
sb.Append("李四,");
sb.Append("王五");
string result = sb.ToString();
Console.WriteLine(result);
}
}
如果需要构建格式化的长字符串,也可以结合插值语法使用StringBuilder的AppendFormat方法。
using System;
using System.Text;
class Program
{
static void Main()
{
StringBuilder sb = new StringBuilder();
string name = "李四";
int score = 90;
sb.AppendFormat("学生姓名:{0},考试成绩:{1}", name, score);
Console.WriteLine(sb.ToString());
}
}
第三方字符串模板类StringTemplate
StringTemplate是一个功能更强大的第三方字符串模板库,支持模板复用、条件判断、循环等复杂逻辑,适合需要生成复杂文本内容(如邮件、报表、代码生成)的场景。
使用前需要先通过NuGet安装Antlr3.StringTemplate包,基础用法如下:
using System;
using Antlr3.ST;
class Program
{
static void Main()
{
// 定义模板内容,使用$变量名$作为占位符
string templateStr = "尊敬的$username$,您的订单号为$orderNo$,订单金额为$amount$元。";
StringTemplate st = new StringTemplate(templateStr);
// 设置模板变量
st.SetAttribute("username", "张三");
st.SetAttribute("orderNo", "20240501001");
st.SetAttribute("amount", 299.9);
// 渲染模板得到最终结果
string result = st.ToString();
Console.WriteLine(result);
}
}
StringTemplate还支持更复杂的模板逻辑,比如在模板中写循环:
using System;
using Antlr3.ST;
class Program
{
static void Main()
{
// 模板中支持迭代集合
string templateStr = "商品列表:n$items:{item | 商品名:$item.Name$,价格:$item.Price$元n}$";
StringTemplate st = new StringTemplate(templateStr);
// 构造测试数据
var items = new[]
{
new { Name = "鼠标", Price = 89.9 },
new { Name = "键盘", Price = 199.9 }
};
st.SetAttribute("items", items);
Console.WriteLine(st.ToString());
}
}
不同字符串模板方案对比
以下是几种常见方案的适用场景和特点对比:
| 方案 | 适用场景 | 优点 | 缺点 |
|---|---|---|---|
| 字符串插值 | 简单的一次性字符串拼接 | 语法简洁,可读性强 | 频繁使用会产生较多内存开销 |
| StringBuilder | 多次拼接的长字符串场景 | 性能好,减少内存分配 | 复杂格式化时代码不够直观 |
| StringTemplate | 复杂模板、需要逻辑控制的场景 | 功能强大,模板可复用 | 需要引入第三方库,学习成本稍高 |
选择建议
如果只是简单的变量拼接,优先使用字符串插值;如果需要多次拼接字符串生成长文本,使用StringBuilder;如果需要生成带条件、循环的复杂文本内容,比如自动生成邮件、报表、配置文件等,推荐选择StringTemplate。
C#字符串模板StringTemplateStringBuilder插值字符串修改时间:2026-06-10 23:30:26