什么是它们之间的区别:
String.Concat
,String.Format
,+
运算符.
在任何情况下,长字符串或短字符串连接时哪个更有效率。
注意:保留HTML标记。string.Concat
仅仅是将字符串连接在一起,没有除了调用ToString
之外的任何转换或格式化功能。
string.Format
则更加丰富,允许使用格式模式等功能。
当您在C#源代码中使用+
运算符时,编译器会将其转换为对String.Concat
的调用 - 它不像decimal
中的运算符一样在执行时进行运算。
所以这个:
string result = x + y + z;
被编译成了这个:
string result = string.Concat(x, y, z);
在效率方面,显然调用 string.Concat
和使用 +
可以等价。通常情况下,我会认为这比 string.Format
更快,但在大多数情况下差异可以忽略不计。你应该首先编写最清晰、最易于维护的代码(通常意味着使用 string.Format
),然后只有在有测试数据表明需要优化特定部分时才进行微观优化,而且只有在证明它有帮助时才保留优化。
请注意,在一个循环中 重复 连接字符串是一个可以做出一些优化的领域。这段代码非常低效:
string result = "";
foreach (var x in y)
{
// Do some processing...
string z = ...;
result += z;
}
这将导致在每次迭代中都要复制一个中间字符串。在这种情况下,要么使用 StringBuilder
,要么使用一个 LINQ 查询来表示您最终需要连接的项,然后使用 string.Join
或 string.Concat
来执行连接操作。
String.Format
实例化了一个StringBuilder
来完成工作,而String.Concat
(以及+
,据推测)则使用了内存中的unsafe
字符串操作。 - Owen Blacker