2012-03-26 63 views
2

說我有一個StringBuilder對象StringBuilder.Append爲字符串數組?

var sb = new StringBuilder(); 

和字符串的arbritrary陣列

var s = new []{"a","b","c"}; 

這是「最快」的方式將它們插入到stringbuilder實例?

sb.Append(string.join(string.empty, s)); 

還有嗎StringBuilder有一個我忽略的功能嗎?

編輯:對不起,我不知道有多少項sb將包含,或每個String []中可能有多少項目。

+0

有這麼簡單,我認爲這不重要 – pylover 2012-03-26 09:47:45

回答

7

如果你的意思是「最快」比大多數更好地利用高性能:

for(int i = 0; i < myArrayLen; i++) 
    sb.Append(myArray[i]); 
+2

不應該是'for(int i = 0;'? – Bazzz 2012-03-26 09:45:13

+0

因爲比foreach或linq迭代要快得多 – pylover 2012-03-26 09:48:32

+0

a總是比任何LINQ表達式都快並且比ForEach快一點(因爲它通過索引而不是在IEnumerable int上調用方法erface) – 2012-03-26 09:50:34

-2

我相信你已經有了正確答案:

sb.Append(string.join(string.empty, s)) 
1

string.Concat(...)應該比string.Join("", ...)更快。另外,這取決於你在用StringBuilder做什麼。如果你只執行幾個連接,那麼不用它就可以更快。

更多的上下文總是有幫助!

1

信不信由你,但string.Concat比StringBuilder的速度更快,當字符串是4/5。
This article很好地討論這個問題。

+0

這取決於你傳遞給'Concat'方法的集合。如果它是'IEnumerable ',那麼內部'Concat'使用'StringBuilder'類。 – 2012-03-26 09:52:25

-1

爲此在一行中沒有一個循環,你可以這樣做:

sb.Append(String.Join(Environment.NewLine, s)); 

,也將工作s是任何類型的

IEnumerable<string>