C# 字符串连接最佳实践

C# 字符串连接最佳实践,c#,string-formatting,string-concatenation,C#,String Formatting,String Concatenation,试图确定使用string.Format代替串接字符串是否是一种更好的做法,如果是,原因是什么?另外,我应该知道他们的优点/缺点是一个还是另一个 这: 或: 显然,示例过于简单,只是想澄清一下。假设第一个方法在编译时没有优化,因为字符串是不可变的,它将创建许多中间字符串。它将从左到右工作,所以首先是“我是”,然后是“我是一个”,最后是“我是一个字符串”,它存储在foo中 String.format不会生成中间字符串。据我所知,它在char[]中执行所有操作,然后通过将其设置为字符串而使其不可变。最

试图确定使用string.Format代替串接字符串是否是一种更好的做法,如果是,原因是什么?另外,我应该知道他们的优点/缺点是一个还是另一个

这:

或:


显然,示例过于简单,只是想澄清一下。

假设第一个方法在编译时没有优化,因为字符串是不可变的,它将创建许多中间字符串。它将从左到右工作,所以首先是“我是”,然后是“我是一个”,最后是“我是一个字符串”,它存储在foo中


String.format不会生成中间字符串。据我所知,它在
char[]
中执行所有操作,然后通过将其设置为字符串而使其不可变。

最佳实践应该是使代码最具可读性和可维护性的东西。连接字符串与使用
string.Format
与使用
StringBuilder
之间的性能差异非常小,基本上是无关的。

因为第一个字符串只使用字符串常量,所以在编译时对其进行评估。所以第一个等价于
string foo=“我是一个字符串。”这实际上取决于上下文。通常,如果我的大多数字符串是静态的,并且有一些动态位,我只使用
String.Format()
。说到这里,string与string的用法通常取决于您是否在调用函数。例如,如果我正在创建一个新字符串,我会调用
string foo=“”
,但是如果我正在调用Format,我会使用
string.Format()
,这只是一个注释,因为您想知道“最佳实践”是一个非常广泛的主题。有时串联更好,有时格式更好,通常选择
StringBuilder
。在您的简单示例中,串联是最好的。但总的来说没有“最好的”。这取决于具体情况。看,它实际上将编译为一个调用,我想这是相当智能的,因此它不会创建任何超出需要的字符串。如果你用一堆
+=
s来编写它,那么是的,它会进行一堆串联,并且(除非抖动优化了它)会有额外的字符串。我从来不知道它会这样做。但你和你们两个似乎都表明了这一点。谢谢。对于这个问题,StringBuilder和concatenation之间的区别几乎可以忽略不计,但是在许多字符串被连接的情况下,有一个明确的区别。请参阅以下文章:
string foo = "I" + " am " + " a " + " string.";
string bar = string.Format("{0} am a {1}.", "I", "string");