我一直在创建动态字符串以附加到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));
答案 0 :(得分:5)
只需创建自己的调用AppendLine
和AppendFormat
的扩展方法,即可创建所需的方法,即使用格式字符串追加行而无需显式添加新行字符的功能:
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())
。