有什么区别:String.Concat,string.format和+之间有什么区别?
String.Concat
,String.Format
,+
运营商。
哪一个在每个条件下更有效,无论是长或短字符串连接。
有什么区别:String.Concat,string.format和+之间有什么区别?
String.Concat
,String.Format
,+
运营商。哪一个在每个条件下更有效,无论是长或短字符串连接。
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
来执行连接。
非常好的答案! +1 – theknut 2012-02-15 07:32:05
可能值得指出的是,性能差异(尽管可能可以忽略,正如Jon指出的那样)是因为在引擎盖下,String.Format实例化一个StringBuilder来完成这项工作,而String.Concat(和'+',大概是)然后)在内存中使用'unsafe'字符串操作。 – 2012-08-24 22:01:02
@OwenBlacker:我不想因此假设它。从根本上说,它正在做更多的工作 - 它必须解析格式字符串的一件事。 – 2012-08-24 22:05:02