2012-02-15 527 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

相關問題