可能重复:
String vs StringBuilder
我知道.NET字符串是不可变的,这就是为什么每次我们改变它时都会创建一个新的字符串对象(插入,追加,删除等)。
这听起来很合理,为什么我们仍然使用.NET String类函数而不是更快的StringBuilder?
答案 0 :(得分:3)
StringBuilder
在循环中重复(非编译时)连接的速度更快。
对于普通的字符串操作,它们的执行效果相同。
特别是,a + b + c
编译为String.Concat(a, b, c)
,它分配一个缓冲区,并且比字符串生成器快或快。
StringBuilder
仅比多个单独的Concat
更快,因为每个Concat
都需要创建一个新的缓冲区。
答案 1 :(得分:2)
简单:它更容易,性能很少成为问题。除非项目另有特别要求,否则可维护性更为重要。
哪个更容易?这样:
public override string ToString() {
return this.LastName + ", " + this.FirstName;
}
还是这个?
public override string ToString() {
System.Text.StringBuilder sb = new System.Text.StringBuilder();
sb.Append(this.LastName);
sb.Append(", ");
sb.Append(this.FirstName);
return sb.ToString();
}
不可否认,您可能会使用var
和using System.Text;
,但它仍然要复杂得多,而且可读性要低得多。并且StringBuilder
主要用于某种形式的循环中的连接,因为否则操作可以被优化,因此您很少需要使用它们。
答案 2 :(得分:0)
查看String
和StringBuilder
的MSDN文章,String
上有几种不在StringBuilder
上的方法。 Trim
,IndexOf
,Pad[Left|Right]
,ToUpper
和ToLower
仅举几例。最重要的是,正如minitech指出的那样,StringBuilder
是一种痛苦的工作。如果你有很多字符串操作,StringBuilder
很棒。但对于简单的东西,String
效果很好。