Jer*_*oyd 5 c# string stringbuilder string-formatting
string str = 'my {0} long string {1} need formatting';
Run Code Online (Sandbox Code Playgroud)
我应该做以下事情,
str = string.Format(str, "really", "doesn't");
Run Code Online (Sandbox Code Playgroud)
或者创建一个类似的方法并调用 str = str.ReplaceWithValues("really", "doesn't");
public string ReplaceWithValues(this string str, params object[] values) {
string ret = str;
for (int i = 0; i < values.Length; i++) {
ret = str.Replace(string.Concat("{", i, "}"), values.ToString());
}
return ret;
}
Run Code Online (Sandbox Code Playgroud)
看起来StringBuilder.AppendFormat()在执行像这样的简单替换时效率不高,因为它通过字符串逐个字符地进行.
Ree*_*sey 15
你为什么要重新发明String.Format?
我只是使用框架方法 - 它完全符合你的要求,是健壮的,并且对那些跟随的人有意义......
只是为了满足你的好奇心:
看起来StringBuilder.AppendFormat()在执行像这样的简单替换时效率不高,因为它通过字符串逐个字符地进行.
String.Format,FYI,在内部使用StringBuilder.AppendFormat.话虽如此,StringBuilder.AppendFormat非常有效.你提到它通过字符串"逐字符" - 但是,在你的情况下,你正在使用多次调用Replace和Concat.使用StringBuilder单次传递字符串可能要快得多.如果您真的需要知道 - 您可以对此进行分析以进行检查.在我的机器上,如果我同时运行以上1,000,000次,我会得到以下时间:
String.Format - 1029464 ticks
Custom method - 2988568 ticks
Run Code Online (Sandbox Code Playgroud)