String与StringBuilder - 字符串的轻重量级

有人经常问String和StringBuilder有什么区别,啥时候用什么呢?

其实,如果是简单的字符串应用的话,一般都用string。
 
下面我们来举个例子:
string strEmail = "";

strEmail 
+= "<tr><td>" + xxxxx + "</td>";
strEmail 
+= "<td>" + yyyyy + "</td>";
strEmail 
+= "<td>" + xxxxx+ "</td>";
strEmail 
+= "<td>" + yyyyy + "</td></tr>";

以上属于比较丑陋的代码了,像这种情况,至少,我们应该利用一下C#中的字符串换行符号@和string.Format吧。
可以这样写:
strEmail = "";
strEmail 
+= string.Format(@"
<tr>
<td>{0}</td>
<td>{1}</td>
<td>{2}</td>
<td>{3}</td>
</tr>
",
xxxxx,
yyyyy,
xxxxx,
yyyyy);

但是以上写法还不是最好的,这个时候我们想到了StringBuilder。
因为在比较重量级的字符串拼接的场景下,最好使用StringBuilder。
新的写法如下:
var sbEmail = new StringBuilder(@"<table border=""1"">
<tr>
<td>Header A</td>
<td>Header B</td>
<td>Header C</td>
<td>Header D</td>
</tr>
");

//items只是一个特定的ArrayList,用于循环添加表格的行,可以不必理会
foreach (var item in items)
{
  sbEmail.AppendFormat(
@"
  <tr>
  <td>{0}</td>
  <td>{1}</td>
  <td>{2}</td>
  <td>{3}</td>
  </tr>
",
  xxxxx,
  yyyyy,
  xxxxx
  yyyyy);
}

sbEmail.AppendLine(
"</table>");

我们需要注意的是:AppendFormat和AppendLine

posted @ 2009-08-06 17:46  Master HaKu  阅读(391)  评论(0编辑  收藏  举报