我理解这StringBuilder是在循环中连接字符串的选择,如下所示:
List<string> myListOfString = GetStringsFromDatabase();
var theStringBuilder = new StringBuilder();
foreach(string myString in myListOfString)
{
theStringBuilder.Append(myString);
}
var result = theStringBuilder.ToString();
Run Code Online (Sandbox Code Playgroud)
但是哪些场景StringBuilder表现优异String.Join(),反之亦然?
var theStringBuilder = new StringBuilder();
theStringBuilder.Append("Is this ");
theStringBuilder.Append("ever a good ");
theStringBuilder.Append("idea?");
var result = theStringBuilder.ToString();
Run Code Online (Sandbox Code Playgroud)
要么
string result = String.Join(" ", new String[]
{
"Or", "is", "this", "a", "better", "solution", "?"
});
Run Code Online (Sandbox Code Playgroud)
任何指导将不胜感激.
编辑:是否有一个阈值,其中的创建开销StringBuilder是不值得的?
它似乎在代码(Reflector)的引擎盖下string.Join使用StringBuilder:
public static string Join(string separator, IEnumerable<string> values)
{
using (IEnumerator<string> enumerator = values.GetEnumerator())
{
if (!enumerator.MoveNext())
{
return Empty;
}
StringBuilder sb = StringBuilderCache.Acquire(0x10);
if (enumerator.Current != null)
{
sb.Append(enumerator.Current);
}
while (enumerator.MoveNext())
{
sb.Append(separator);
if (enumerator.Current != null)
{
sb.Append(enumerator.Current);
}
}
return StringBuilderCache.GetStringAndRelease(sb);
}
}
Run Code Online (Sandbox Code Playgroud)
所以在你的场景中,它并没有多大差别.但我更喜欢StringBuilder在尝试根据条件连接字符串时使用.