String.Format和StringBuilder哪个更高效?

165

假设我在C#中有一个StringBuilder,它执行以下操作:

StringBuilder sb = new StringBuilder();
string cat = "cat";
sb.Append("the ").Append(cat).(" in the hat");
string s = sb.ToString();

那种方式是否与以下方式同样有效或更有效:

string cat = "cat";
string s = String.Format("The {0} in the hat", cat);
如果是这样,为什么?
编辑
看了一些有趣的答案后,我意识到我可能应该更清楚地表达我的问题。我不是在问哪个更快地连接字符串,而是在问哪个更快地将一个字符串注入到另一个字符串中。
在上面两种情况中,我都想将一个或多个字符串注入到预定义模板字符串的中间。
对于造成的困惑感到抱歉。

请将这些保持开放,以便未来进行改进。 - Mark Biek
4
在一个特殊的情况下,最快的方法并不是使用之前提到的两种方法中的任何一种:如果要替换的部分与新部分的大小相等,那么可以直接在原字符串中进行替换。不幸的是,这需要反射或不安全的代码,并且有意违反了字符串的不可变性。虽然这不是一个好的实践,但如果速度是一个问题...... :) - Abel
在上面的例子中, string s = "The "+cat+" in the hat"; 可能是最快的,除非它用于循环,在这种情况下,最快的方法是使用在循环之外初始化的 StringBuilder - Surya Pratap
12个回答

0
在上述两种情况中,我想将一个或多个字符串注入到预定义的模板字符串中。在这种情况下,我建议使用 String.Format 是最快的,因为它是专为此目的而设计的。

-1
我建议不要这样做,因为 String.Format 不是为字符串连接而设计的,它是为格式化各种输入(如日期)的输出而设计的。
String s = String.Format("Today is {0:dd-MMM-yyyy}.", DateTime.Today);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接