有什麼區別: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