在C#编程中,字符串拼接是日常开发里高频出现的操作,不同的拼接方式在性能和适用场景上存在明显差异,开发者需要根据实际需求选择合适的方法。

C#常用字符串拼接方法
1. 使用加号+拼接
这是最直观的拼接方式,适合少量字符串的拼接场景,代码可读性高。
// 使用+拼接字符串 string str1 = "Hello"; string str2 = "World"; string result1 = str1 + " " + str2; Console.WriteLine(result1); // 输出 Hello World
这种方式在拼接少量字符串时非常方便,但是如果在循环中使用,会产生大量的临时字符串对象,导致性能下降。
2. 使用string.Concat方法
string.Concat是C#内置的静态方法,支持拼接多个字符串参数,内部做了优化,比连续使用+拼接少量字符串效率稍高。
// 使用string.Concat拼接
string s1 = "C#";
string s2 = "字符串";
string s3 = "拼接";
string result2 = string.Concat(s1, s2, s3);
Console.WriteLine(result2); // 输出 C#字符串拼接
// 也可以拼接字符串数组
string[] strArray = { "a", "b", "c", "d" };
string result3 = string.Concat(strArray);
Console.WriteLine(result3); // 输出 abcd
3. 使用string.Format方法
这种方式适合需要按固定格式拼接字符串的场景,通过占位符来指定拼接位置,让代码逻辑更清晰。
// 使用string.Format拼接
string name = "张三";
int age = 25;
string result4 = string.Format("姓名:{0},年龄:{1}", name, age);
Console.WriteLine(result4); // 输出 姓名:张三,年龄:25
如果使用的是C# 6.0及以上版本,还可以使用字符串插值语法,它是string.Format的语法糖,写法更简洁。
// 字符串插值语法(C# 6.0+)
string name = "李四";
int score = 90;
string result5 = $"姓名:{name},分数:{score}";
Console.WriteLine(result5); // 输出 姓名:李四,分数:90
4. 使用StringBuilder类
StringBuilder位于System.Text命名空间下,它是可变字符串类型,适合大量字符串拼接的场景,尤其是循环中拼接字符串,能大幅减少内存开销。
using System.Text;
// 使用StringBuilder拼接
StringBuilder sb = new StringBuilder();
sb.Append("开始");
sb.Append("拼接");
sb.Append("字符串");
string result6 = sb.ToString();
Console.WriteLine(result6); // 输出 开始拼接字符串
// 循环中使用StringBuilder
StringBuilder loopSb = new StringBuilder();
for (int i = 0; i < 5; i++)
{
loopSb.Append(i).Append(",");
}
// 移除最后一个多余的逗号
if (loopSb.Length > 0)
{
loopSb.Remove(loopSb.Length - 1, 1);
}
Console.WriteLine(loopSb.ToString()); // 输出 0,1,2,3,4
5. 使用string.Join方法
string.Join适合将字符串数组或者集合按照指定的分隔符拼接成单个字符串,比如拼接列表数据时使用非常方便。
// 使用string.Join拼接
string[] fruits = { "苹果", "香蕉", "橙子" };
string result7 = string.Join("、", fruits);
Console.WriteLine(result7); // 输出 苹果、香蕉、橙子
// 拼接集合
List<string> colorList = new List<string> { "红", "黄", "蓝" };
string result8 = string.Join("-", colorList);
Console.WriteLine(result8); // 输出 红-黄-蓝
不同拼接方式的性能对比
我们可以通过简单的测试来对比不同方式在大量拼接场景下的性能差异,以下是测试代码示例:
using System;
using System.Diagnostics;
using System.Text;
class Program
{
static void Main()
{
int loopCount = 10000;
Stopwatch sw = new Stopwatch();
// 测试+拼接
sw.Start();
string plusStr = "";
for (int i = 0; i < loopCount; i++)
{
plusStr += i.ToString();
}
sw.Stop();
Console.WriteLine($"+拼接耗时:{sw.ElapsedMilliseconds}ms");
// 测试StringBuilder拼接
sw.Restart();
StringBuilder sbTest = new StringBuilder();
for (int i = 0; i < loopCount; i++)
{
sbTest.Append(i);
}
string sbStr = sbTest.ToString();
sw.Stop();
Console.WriteLine($"StringBuilder拼接耗时:{sw.ElapsedMilliseconds}ms");
}
}
运行上述代码可以发现,当拼接次数达到10000次时,+拼接的耗时远高于StringBuilder,因此大量拼接场景一定要优先选择StringBuilder。
拼接方式选择建议
- 少量字符串(3个以内)拼接,优先使用+或者字符串插值,代码简洁可读性高
- 需要按固定格式拼接,优先使用string.Format或者字符串插值
- 拼接字符串数组/集合,优先使用string.Join
- 大量字符串拼接,尤其是循环场景,必须使用StringBuilder
- 拼接多个独立字符串,可使用string.Concat
需要注意的是,string类型是 immutable(不可变)的,每次对string进行修改都会生成新的字符串对象,而<code>StringBuilder</code>是可变类型,修改时不会生成新对象,这就是两者在大量拼接场景下性能差异的核心原因。
C#字符串拼接StringBuilderstringConcat修改时间:2026-07-22 07:33:23