2012-02-15 518 views

回答

13

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.Joinstring.Concat来执行连接。

+0

非常好的答案! +1 – theknut 2012-02-15 07:32:05

+0

可能值得指出的是,性能差异(尽管可能可以忽略,正如Jon指出的那样)是因为在引擎盖下,String.Format实例化一个StringBuilder来完成这项工作,而String.Concat(和'+',大概是)然后)在内存中使用'unsafe'字符串操作。 – 2012-08-24 22:01:02

+0

@OwenBlacker:我不想因此假设它。从根本上说,它正在做更多的工作 - 它必须解析格式字符串的一件事。 – 2012-08-24 22:05:02

相关问题