在C#中,可以通过几种不同的方式连接字符串:
使用连接运算符:
var newString = "The answer is '" + value + "'.";
使用String.Format
:
var newString = String.Format("The answer is '{0}'.", value);
使用String.Concat
:
var newString = String.Concat("The answer is '", value, "'.");
每种方法的优点/缺点是什么?我什么时候应该比其他人更喜欢?
问题出现是因为开发人员之间的争论。一个从不使用String.Format
进行连接 - 他认为这是用于格式化字符串,而不是用于连接,并且这总是不可读的,因为字符串中的项以错误的顺序表示。其他经常使用String.Format
进行连接,因为他认为它使代码更易于阅读,尤其是涉及多组引号时。这两个开发人员也使用连接运算符和String.Builder。
答案 0 :(得分:16)
关于速度,它几乎总是doesn't matter。
var answer = "Use what makes " + "the code most easy " + "to read";
答案 1 :(得分:3)
当我将超过2或3个值链接在一起时,我通常会使用string.Format,因为它可以更容易地看到最终结果的样子。连接字符串很慢,因为您需要为每个操作创建一个新的字符串对象。
如果你需要加入超过5个字符串,请使用StringBuilder,因为它会更快。
答案 2 :(得分:3)
我通常会考虑可读性,并倾向于使用格式。大多数代码都是一次写入并多次读取,因此确保读者能够快速理解所说的内容对我来说更重要(对我而言)。
答案 3 :(得分:3)
很奇怪,但String.Format在内部使用StringBuilder.AppendFormat()。例如,String.Format代码看起来像:
public static string Format(IFormatProvider provider, string format, params object[] args)
{
if (format == null || args == null)
throw new ArgumentNullException((format == null ? "format" : "args"));
StringBuilder builder = new StringBuilder(format.Length + (args.Length * 8));
builder.AppendFormat(provider, format, args);
return builder.ToString();
}
有关此内容的更多信息,您可以找到here。那么,为什么我们这里没有提到StringBuilder.AppendFormat()!
关于主要问题:
关键是为工作挑选最好的工具。我的意思是什么?考虑一下这些令人敬畏的智慧之词:
* Concatenate (+) is best at concatenating.
* StringBuilder is best when you need to building.
* Format is best at formatting.
答案 4 :(得分:2)
性能方面的考虑通常是这一决定背后的驱动因素。请参阅Ayende的this文章。
答案 5 :(得分:0)
不建议在代码中存储字符串,因此如果您决定从代码中提取字符串,那么使用String.Format将更容易实现
答案 6 :(得分:0)
这是一篇关于各种连接方法和用于生成IL的编译器优化的内存使用情况的文章。 Concatenation methods and optimization issue