c#字符串连接使用“+”和string.format格式化两种方式
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
c#字符串连接使⽤“+”和string.format格式化两种⽅式
字符串之间的连接常⽤的两种是:“+”连接、string.format格式化连接、StringBuilder 连接
1.什么时候使⽤“+”连接呢?
待连接的字符串在6个以下,可以使⽤ + 连接
使⽤ + 连接最终会调⽤ String.Concat ⽅法,当同时连接⼏个字符串时,并不是每连接⼀个都分配⼀次内存,⽽是把⼏个字符都作为 String.Concat ⽅法的参数,只分配⼀次内存,如:
string s = s1 + s2 + s3 + s4 + s5;
最终会被编译为:string.Concat(s1, s2, s3, s4, s5);
经测试,当待连接的字符串在6个以下时,使⽤ + 连接,效率略⾼于 StringBuilder
2、何时使⽤ StringBuilder
如果待连接字符串在6个以上,使⽤ StringBuilder ⽐较合适。
StringBuilder 只分配⼀次内存,如果第⼆次连接内存不⾜,则修改内存⼤⼩;它每次默认分配16字节,如果内存不⾜,则扩展到32字节,如果仍然不⾜,继续成倍扩展。
使⽤ StringBuilder 的关键是分配好内存,如果频繁的扩展内存,效率⼤打折扣,因为分配内存,时间开销相对⽐较⼤。
如果事先能准确估计程序执⾏过程中所需要的内存,从⽽⼀次分配⾜内存,效率⼤⼤提⾼。
如果不能准确估计,也要尽量减少内存的分配次数。
3、字符格式(string.format)
string.format ⽅法,其实最终是调⽤ StringBuilder,原型如下:
public static string Format(IFormatProvider provider, string format, params object[] args)
{
if ((format == null) || (args == null))
{
throw new ArgumentNullException((format == null) ? "format" : "args");
}
StringBuilder builder = new StringBuilder(format.Length + (args.Length * 8));
builder.AppendFormat(provider, format, args);
return builder.ToString();
}
如果在待连接字符串⽐较少的情况下,并没有什么效率上的差别,在 StringBuilder 和 string.format 之间可以根据⽅便性或习惯⾃由选择。
如果连接的字符串很多, StringBuilder 的效率⾃然要⾼,并且使⽤ string.format 也不太⽅便。