AppendFormat()或AppendLine()是更安全/更时尚的解决方案吗?

时间:2014-06-06 17:54:48

标签: c# performance append stringbuilder string.format

我一直在创建动态字符串以附加到StringBuilder,如下所示:

StringBuilder sb = new StringBuilder();
string bla = "bla";
sb.AppendLine(string.Format("android:id=\"@+id/{0}\" ", bla));

...但后来我注意到StringBuilder有一个AppendFormat()方法,它避免了“ string.Format()”。所以我想知道AppendFormat()是否也像AppendLine()那样添加换行符(而不是Append(),而不是)。

IOW,达到与以下相同的效果:

sb.AppendLine(string.Format("android:id=\"@+id/{0}\" ", bla));

...当使用AppendFormat()时,我需要使用两行,如下所示:

sb.AppendFormat("android:id=\"@+id/{0}\" ", bla);
sb.AppendLine();

答案是肯定的 - 需要两行,或者我必须恢复在对AppendLine()的调用中显式使用string.Format()。

实际上,至少有一种方法可以用AppendFormat()在一行中完成,即:

sb.AppendFormat("android:id=\"@+id/{0}\" {1}", bla, Environment.NewLine);

...但这可能不比AppendLine(string.Format(...

)更优雅

以下哪项更好(更高性能)或更安全,或者无关紧要?

sb.AppendFormat("android:id=\"@+id/{0}\" {1}", bla, Environment.NewLine);
sb.AppendLine(string.Format("android:id=\"@+id/{0}\" ", bla));

2 个答案:

答案 0 :(得分:5)

只需创建自己的调用AppendLineAppendFormat的扩展方法,即可创建所需的方法,即使用格式字符串追加行而无需显式添加新行字符的功能:

public static StringBuilder AppendLineFormat(
    this StringBuilder builder,
    string formatString,
    params object[] args)
{
    return builder.AppendFormat(formatString, args)
        .AppendLine();
}

(如果您愿意,可以为AppendFormat的每次重载创建一个重载。)

答案 1 :(得分:3)

最具可读性的是:

sb.AppendFormat("android:id=\"@+id/{0}\" ", bla)
  .AppendLine();

string.Format在内部使用StringBuilder,因此我不会使用sb.AppendLine(string.Format())